Войти через Twitter в Laravel с помощью Laravel Socialite
Недавно я опубликовал статью о входе в систему через 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. Я хотел бы услышать ваши мысли или предложения в разделе комментариев ниже.
Статьи по Теме
- Войдите в LinkedIn в Laravel с помощью Laravel Socialite
- Вход в Google в Laravel с помощью Laravel Socialite