WEB и WordPress новости, темы, плагины. Здесь мы делимся советами и лучшими решениями для сайтов.

Войти через Twitter в Laravel с помощью Laravel Socialite

67

Недавно я опубликовал статью о входе в систему через Twitter на PHP. Один из наших читателей попросил написать статью о входе в Twitter в Laravel. Хотя Laravel построен на языке программирования PHP, и я писал о входе в Twitter на PHP, я знаю, что предыдущее руководство не подходит для фреймворка Laravel. В Laravel есть своя структура папок, поток разработки. Разработчик должен следовать стандартам Laravel при создании в нем веб-приложений.

У Laravel есть официальные пакеты, которые помогают разработчикам достичь определенной функциональности. Один из пакетов – Socialite. Используя Socialite, вы можете интегрировать социальный вход с различными провайдерами, такими как Facebook, Twitter, LinkedIn, Google и т.д.

В этой статье мы изучаем вход через Twitter в Laravel с помощью Laravel Socialite.

Начиная

Начнем с новой установки Laravel. Не обязательно использовать новую установку Laravel, вы также можете использовать свой существующий проект.

Для установки последней версии Laravel выполните следующую команду:

composer create-project --prefer-dist laravel/laravel twitterlogin

После установки создайте базу данных и добавьте учетные данные в .envфайл. Мы создаем систему входа в систему, поэтому мы должны хранить данные пользователя в базе данных.

Это руководство основано на «Войти через Twitter», поэтому мы получим идентификатор пользователя Twitter после успешной аутентификации. Чтобы сохранить этот социальный идентификатор, мы добавляем столбцы providerи provider_idв таблицу «Пользователи». В столбце providerбудет храниться значение «twitter», а в столбце provider_id– идентификатор пользователя Twitter.

Когда мы используем вход через социальную сеть, нам не нужно хранить пароли, поэтому столбец пароля должен принимать значение «NULL» по умолчанию. Нет никакой гарантии получения электронной почты пользователя после входа в социальную сеть, поэтому из любопытства нам нужно настроить столбцы электронной почты так, чтобы они принимали значение «NULL».

Откройте файл миграции таблицы пользователей и добавьте приведенный ниже код.

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('email')->nullable();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password')->nullable();
        $table->string('provider');
        $table->string('provider_id');
        $table->rememberToken();
        $table->timestamps();
    });
}

После этого запустите команду миграции, которая создаст таблицы в вашей базе данных.

php artisan migrate

Кроме того, необходимо добавить providerи provider_idстолбцы в модели пользователя.

приложение / User.php

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
    'name', 'email', 'password', 'provider', 'provider_id'
];

Получить учетные данные Twitter

Поскольку мы собираемся интегрировать вход в Twitter в Laravel, вам сначала нужно получить свои учетные данные Twitter. Выполните следующие действия, чтобы создать приложение Twitter и получить свои учетные данные.

  • Войдите в учетную запись разработчика Twitter и создайте новое приложение.
  • Заполните все обязательные поля, такие как название и описание приложения.
  • Добавьте домен своего веб-сайта в поле Веб-сайт.
  • Задайте URL-адрес обратного вызова как http://localhost:8000/twitter/callback. Отрегулируйте URL-адрес в соответствии с вашими требованиями.
  • После регистрации скопируйте и вставьте созданные учетные данные приложения (Consumer Key и Secret), которые потребуются через некоторое время.

Используя эти скопированные учетные данные, ваше приложение Laravel завершит поток OAuth, когда пользователи войдут в свою учетную запись Twitter.

Создать маршруты и контроллер

Чтобы включить функцию входа в Twitter, нам нужно добавить код в наш проект Laravel. Создадим с LoginControllerпомощью команды:

php artisan make:controller LoginController

Нам нужно добавить ссылку для входа в файл лезвия. Создайте login.blade.phpи добавьте к нему следующий HTML-код.

<a href="{{ url('/login/twitter') }}" class="btn btn-success">
    {{ __('Login with Twitter') }}
</a>

Вы можете вызвать это представление из indexметода LoginController.

/**
 * Call the view
 */
public function index()
{
    return view('login');
}

Затем добавьте для него маршрут. Я также добавляю еще несколько маршрутов, которые потребуются для следующей части урока.

Route::get('login', 'LoginController@index');
Route::get('login/{provider}', 'LoginController@redirectToProvider');
Route::get('{provider}/callback', 'LoginController@handleProviderCallback');
Route::get('/home', function() {
    return 'User is logged in';
});

После того, как пользователь войдет в систему с помощью Twitter, я перенаправлю его на homeмаршрут. Это просто для демонстрационных целей. Вам следует изменить этот маршрут на другой.

Войти через Twitter в Laravel

Пришло время использовать пакет Socialite. Используя приведенную ниже команду, вы можете установить пакет Socialite в свой проект Laravel.

composer require laravel/socialite

После установки Socialite нам нужно его настроить. Откройте config/services.phpи добавьте конфигурацию Twitter в этот файл следующим образом:

'twitter' => [
    'client_id' => env('TWITTER_API_KEY'),
    'client_secret' => env('TWITTER_API_SECRET_KEY'),
    'redirect' => env('TWITTER_CALLBACK_URL'),
],

Вы можете заметить, что я использовал этот envметод для получения указанных значений. Это означает, что нам нужно определить эти константы в .envфайле.

TWITTER_API_KEY=PASTE_TWITTER_API_KEY
TWITTER_API_SECRET_KEY=PASTE_TWITTER_API_SECRET_KEY
TWITTER_CALLBACK_URL=http://localhost:8000/twitter/callback

Обязательно замените заполнители вашими ключами API. Затем LoginControllerмы пишем функцию, которая перенаправляет пользователя на страницу входа в Twitter, и при успешной авторизации она выполняет вход пользователя в систему.

LoginController.php

<?php
 
namespace AppHttpControllers;
 
use IlluminateHttpRequest;
use Socialite;
use AppModelsUser;
use Auth;
 
class LoginController extends Controller
{
    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/home';
  
    /**
     * Call the view
     */
    public function index()
    {
        return view('login');
    }
  
    /**
     * Redirect the user to the Twitter authentication page.
     *
     * @return Response
     */
    public function redirectToProvider($provider)
    {
        return Socialite::driver($provider)->redirect();
    }
    
    /**
     * Obtain the user information from Twitter.
     *
     * @return Response
     */
    public function handleProviderCallback($provider)
    {
        $user = Socialite::driver($provider)->user();
        $authUser = $this->findOrCreateUser($user, $provider);
        Auth::login($authUser, true);
        return redirect($this->redirectTo);
    }
    
    /**
     * If a user has registered before using social auth, return the user
     * else, create a new user object.
     * @param  $user Socialite user object
     * @param $provider Social auth provider
     * @return  User
     */
    public function findOrCreateUser($user, $provider)
    {
        $authUser = User::where('provider_id', $user->id)->first();
        if ($authUser) {
            return $authUser;
        }
        return User::create([
            'name'     => $user->name,
            'email'    => $user->email,
            'provider' => $provider,
            'provider_id' => $user->id
        ]);
    }
}

Перейдите на страницу входа и нажмите ссылку «Войти через Twitter». Завершите процесс, и вы должны войти в систему с помощью Twitter. Вы также можете найти записи пользователей в usersтаблице.

Я надеюсь, что вы сможете узнать о входе в систему через Twitter в Laravel с помощью пакета Socialite. Я хотел бы услышать ваши мысли или предложения в разделе комментариев ниже.

Статьи по Теме

Источник записи: artisansweb.net

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее