Увійдіть за допомогою LinkedIn в Laravel за допомогою Laravel Socialite
Додавання системи соціального входу на веб-сайті – це тенденція сьогодні. Інтегруючи соціальний логін, він пропускає процес перевірки користувача. Соціальні сайти вже перевірили користувачів, тому нашій програмі не потрібно виконувати той самий процес із користувачем. Ми можемо покластися на соціальні сайти і дозволити користувачеві користуватися нашою системою, якщо він входить через соціальний сайт на нашому веб-сайті. Facebook, Twitter, Google, LinkedIn – це популярні соціальні сайти, які зазвичай інтегровані як соціальний логін на веб-сайті. У цій статті ми розглянемо логін за допомогою LinkedIn у Laravel.
Для нашого підручника я інтегрую вхід LinkedIn у свіжу інсталяцію Laravel. Я збираюся встановити Laravel, створити таблицю "користувачів" та встановити пакети, необхідні для інтеграції соціальної системи входу.
Виконайте команду нижче, щоб встановити Laravel. Тут я створюю проект як ‘linkedinlogin’.
composer create-project --prefer-dist laravel/laravel linkedinlogin
Після встановлення створіть базу даних та встановіть облікові дані у .env
файлі. Ми будуємо систему входу, тому ми повинні зберігати дані користувачів у базі даних.
Цей підручник заснований на вході в LinkedIn, тому ми отримаємо ідентифікатор профілю LinkedIn користувача після успішної автентифікації. Для збереження цього соціального ідентифікатора ми додаємо стовпці provider і provider_id. Тут стовпець провайдера буде зберігати значення ‘linkedin’, а provider_id – соціальний ідентифікатор користувача.
Коли ми використовували соціальний логін, нам не потрібно зберігати паролі, тому значення стовпця пароля повинно приймати значення 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
Нам також потрібно додати ці два стовпці в нашу модель користувача.
app / User.php
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password', 'provider', 'provider_id'
];
Створіть додаток LinkedIn
Для того, щоб інтегрувати логін LinkedIn, вам слід створити програму у своєму акаунті LinkedIn. Нам потрібен ідентифікатор клієнта, секрет клієнта програми LinkedIn. Нам також потрібно встановити в додатку авторизовану URL-адресу для переадресації.
- Перейдіть до мережі розробників LinkedIn.
- Натисніть кнопку "Створити програму".
- Заповніть інформацію у формі.
- Додайте
http://localhost:8000/linkedin/callback
у поле Авторизовані URL-адреси для переспрямування. - Скопіюйте ідентифікатор клієнта та секретні ключі клієнта.
Після вищевказаних кроків вам потрібно додати продукт "Увійти за допомогою LinkedIn" до своєї програми LinkedIn. Клацніть на вкладку "продукти" та виберіть "Увійти за допомогою LinkedIn". Після вибору цього продукту він буде переглянутий, а потім включений як доданий товар. Це може зайняти деякий час для перегляду. У моєму випадку це зайняло близько 10 хвилин.
Створіть маршрути та контролер
Тепер ми можемо почати додавати код у Laravel. Створіть контролер LoginController
за допомогою команди:
php artisan make:controller LoginController
Далі створіть файл леза login.blade.php
і додайте до нього такий HTML.
<a href="{{ url('/login/linkedin') }}">
{{ __('Login with LinkedIn') }}
</a>
Викличте цей вигляд index
методом LoginController
наступним чином.
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';
});
Коли користувач увійде в систему з LinkedIn, я перенаправлю його на home
маршрут. Це просто для демонстраційних цілей. Вам слід змінити цей маршрут на інший.
Увійдіть за допомогою LinkedIn Laravel
Laravel має офіційний пакет Socialite. Цей пакет допомагає нам легко інтегрувати систему соціального входу в Laravel. Встановіть цей пакет за допомогою команди:
composer require laravel/socialite
Після встановлення бібліотеки відкрийте config/services.php
та додайте конфігурацію LinkedIn наступним чином:
'linkedin' => [
'client_id' => env('LINKEDIN_CLIENT_ID'),
'client_secret' => env('LINKEDIN_CLIENT_SECRET'),
'redirect' => env('LINKEDIN_CALLBACK_URL'),
],
Тепер нам потрібно додати наші константи у .env
файл.
LINKEDIN_CLIENT_ID=YOUR_CLIENT_ID
LINKEDIN_CLIENT_SECRET=YOUR_CLIENT_SECRET
LINKEDIN_CALLBACK_URL=http://localhost:8000/linkedin/callback
Обов’язково замінюйте заповнювачі фактичними значеннями. Остаточні коригування повинні йти у LoginController.php
файлі. У цьому файлі ми пишемо функцію, яка перенаправляє користувача на сторінку входу LinkedIn, і після успішної авторизації він ввійде в систему.
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 Linkedin authentication page.
*
* @return Response
*/
public function redirectToProvider($provider)
{
return Socialite::driver($provider)->scopes(['r_liteprofile', 'r_emailaddress'])->redirect();
}
/**
* Obtain the user information from Linkedin.
*
* @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
]);
}
}
У нашому LoginController
, ми встановлюємо області дії, ['r_liteprofile', 'r_emailaddress']
які необхідні для отримання основної інформації користувача LinkedIn. У методі зворотного виклику ми перевіряємо, чи існує користувач, і якщо його немає, то додаємо користувача до бази даних.
Сподіваюся, ви розумієте, як увійти в систему з LinkedIn в Laravel. Я хотів би почути ваші думки та пропозиції у розділі коментарів нижче.
Пов’язані статті
- Вхід Google у Laravel за допомогою Laravel Socialite
- Як додати вхід Google OAuth на веб-сайт за допомогою PHP
- Створення багатомовного веб-сайту в PHP за допомогою Laravel Framework