Zaloguj się na LinkedIn w Laravel za pomocą Laravel Socialite
Dodanie systemu logowania społecznościowego na stronie jest obecnie trendem. Dzięki integracji logowania społecznościowego pominie proces weryfikacji użytkownika. Serwisy społecznościowe już zweryfikowały użytkowników, więc nasza aplikacja nie musi przechodzić tego samego procesu z użytkownikiem. Możemy polegać na serwisach społecznościowych i umożliwić użytkownikowi korzystanie z naszego systemu, jeśli zaloguje się on za pośrednictwem serwisu społecznościowego na naszej stronie internetowej. Facebook, Twitter, Google, LinkedIn to popularne serwisy społecznościowe, które zwykle są zintegrowane jako logowanie społecznościowe do witryny. W tym artykule omówimy logowanie za pomocą LinkedIn w Laravel.
W naszym samouczku zintegruję login LinkedIn ze świeżą instalacją Laravela. Mam zamiar zainstalować Laravela, stworzyć tabelę „users" i zainstalować pakiety wymagane do integracji systemu logowania społecznościowego.
Uruchom poniższe polecenie, aby zainstalować Laravel. Tutaj tworzę projekt jako ‘linkedinlogin’.
composer create-project --prefer-dist laravel/laravel linkedinlogin
Po instalacji utwórz bazę danych i ustaw poświadczenia w .env
pliku. Budujemy system logowania, więc powinniśmy przechowywać dane użytkownika w bazie danych.
Ten samouczek opiera się na logowaniu do LinkedIn, więc po pomyślnym uwierzytelnieniu otrzymamy identyfikator profilu LinkedIn użytkownika. Aby przechowywać ten identyfikator społecznościowy, dodajemy kolumny provider i provider_id. Tutaj kolumna dostawcy będzie przechowywać wartość „linkedin”, a provider_id będzie przechowywać identyfikator społecznościowy użytkownika.
Kiedy używamy logowania społecznościowego, nie musimy przechowywać haseł, więc wartość kolumny hasła powinna domyślnie akceptować „NULL”. Nie ma gwarancji, że otrzymamy e-mail użytkownika po zalogowaniu się w mediach społecznościowych, więc dla ciekawości musimy ustawić kolumnę e-mail tak, aby akceptowała „NULL”.
Otwórz plik migracji tabeli użytkowników i dodaj poniższy kod.
/**
* 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();
});
}
Uruchom poniższe polecenie, które utworzy tabele w naszej bazie danych.
php artisan migrate
Musimy również dodać te dwie kolumny w naszym modelu użytkownika.
aplikacja/Użytkownik.php
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password', 'provider', 'provider_id'
];
Utwórz aplikację LinkedIn
Aby zintegrować login LinkedIn, należy utworzyć aplikację na swoim koncie LinkedIn. Potrzebujemy identyfikatora klienta, tajemnicy klienta aplikacji LinkedIn. W aplikacji musimy również ustawić autoryzowany adres URL przekierowania.
- Przejdź do sieci programistów LinkedIn.
- Kliknij przycisk „Utwórz aplikację”.
- Uzupełnij informacje w formularzu.
- Dodaj
http://localhost:8000/linkedin/callback
w polu Autoryzowane adresy URL przekierowania. - Skopiuj klucze Client ID i Client Secret.
Po wykonaniu powyższych kroków musisz dodać produkt „Zaloguj się przez LinkedIn” do swojej aplikacji LinkedIn. Kliknij zakładkę „produkty” i wybierz „Zaloguj się przez LinkedIn”. Po wybraniu tego produktu przejdzie on do przeglądu, a następnie zostanie dodany jako produkt dodany. Sprawdzenie może zająć trochę czasu. W moim przypadku zajęło to około 10 minut.
Twórz trasy i kontroler
Możemy teraz zacząć dodawać kod w Laravelu. Utwórz kontroler LoginController
za pomocą polecenia:
php artisan make:controller LoginController
Następnie utwórz plik kasetowy login.blade.php
i dodaj do niego następujący kod HTML.
<a href="{{ url('/login/linkedin') }}">
{{ __('Login with LinkedIn') }}
</a>
Nazwij ten widok z index
metody w LoginController
następujący sposób.
public function index()
{
return view('login');
}
Zdefiniujmy dla niego trasy. Dodaję też kilka innych tras, które będą wymagane w dalszej części samouczka.
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';
});
Gdy użytkownik zaloguje się na LinkedIn, przekieruję go na home
trasę. To tylko do celów demonstracyjnych. Powinieneś zmienić tę trasę na coś innego.
Zaloguj się na LinkedIn Laravel
Laravel ma oficjalny pakiet Socialite. Ten pakiet pomaga nam łatwo zintegrować system logowania społecznościowego w Laravel. Zainstaluj ten pakiet za pomocą polecenia:
composer require laravel/socialite
Po zainstalowaniu biblioteki otwórz config/services.php
i dodaj konfigurację LinkedIn w następujący sposób:
'linkedin' => [
'client_id' => env('LINKEDIN_CLIENT_ID'),
'client_secret' => env('LINKEDIN_CLIENT_SECRET'),
'redirect' => env('LINKEDIN_CALLBACK_URL'),
],
Teraz musimy dodać nasze stałe wartości do .env
pliku.
LINKEDIN_CLIENT_ID=YOUR_CLIENT_ID
LINKEDIN_CLIENT_SECRET=YOUR_CLIENT_SECRET
LINKEDIN_CALLBACK_URL=http://localhost:8000/linkedin/callback
Pamiętaj, aby zastąpić symbole zastępcze ich rzeczywistymi wartościami. Ostateczne poprawki powinny znaleźć się w LoginController.php
pliku. W tym pliku piszemy funkcję, która przekierowuje użytkownika na stronę logowania LinkedIn, a po udanej autoryzacji zaloguje użytkownika.
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
]);
}
}
W naszym LoginController
ustalamy zakresy ['r_liteprofile', 'r_emailaddress']
wymagane do pobrania podstawowych informacji o użytkowniku LinkedIn. W metodzie callback sprawdzamy, czy użytkownik istnieje, a jeśli nie, to dodajemy go do bazy danych.
Mam nadzieję, że rozumiesz, jak zalogować się na LinkedIn w Laravel. Chciałbym usłyszeć wasze przemyślenia i sugestie w sekcji komentarzy poniżej.
Powiązane artykuły
- Zaloguj się przez Google w Laravel za pomocą Laravel Socialite
- Jak dodać logowanie Google OAuth do witryny za pomocą PHP
- Stwórz wielojęzyczną stronę internetową w PHP za pomocą Laravel Framework