Zaloguj się za pomocą Twittera w Laravel za pomocą Laravel Socialite
Niedawno opublikowałem artykuł na temat logowania przez Twittera w PHP. Jeden z naszych czytelników poprosił o napisanie artykułu o logowaniu przez Twittera w Laravelu. Chociaż Laravel jest zbudowany na języku programowania PHP i pisałem o logowaniu do Twittera w PHP, wiem, że poprzedni samouczek nie jest odpowiedni dla frameworka Laravel. Laravel ma własną strukturę folderów, przepływ rozwoju. Deweloper powinien przestrzegać standardów Laravela budując w nim aplikacje internetowe.
Laravel ma swoje oficjalne pakiety, które pomagają deweloperom osiągnąć określoną funkcjonalność. Jednym z pakietów jest Socialite. Korzystając z Socialite, możesz zintegrować login społecznościowy z różnymi dostawcami, takimi jak Facebook, Twitter, LinkedIn, Google itp.
W tym artykule przyjrzymy się Logowaniu za pomocą Twittera w Laravel przy użyciu Laravel Socialite.
Pierwsze kroki
Zacznijmy od nowej instalacji Laravela. Korzystanie z nowej instalacji Laravela nie jest obowiązkowe, możesz również użyć istniejącego projektu.
Aby zainstalować najnowszą wersję Laravela, uruchom poniższe polecenie:
composer create-project --prefer-dist laravel/laravel twitterlogin
Po instalacji utwórz bazę danych i dodaj poświadczenia w .env
pliku. Budujemy system logowania, więc powinniśmy przechowywać dane użytkownika w bazie danych.
Ten samouczek jest oparty na funkcji Zaloguj się za pomocą Twittera, więc po pomyślnym uwierzytelnieniu otrzymamy identyfikator użytkownika Twittera. Aby przechowywać ten identyfikator społecznościowy, dodajemy kolumny provider
i provider_id
tabelę „użytkownicy". Kolumna provider
będzie przechowywać wartość jako „twitter”, a kolumna będzie dotyczyć provider_id
identyfikatora Twittera użytkownika.
Kiedy używamy logowania społecznościowego, nie musimy przechowywać haseł, więc kolumna hasła powinna domyślnie akceptować wartość „NULL”. Nie ma gwarancji otrzymania wiadomości e-mail użytkownika po zalogowaniu się w mediach społecznościowych, więc dla ciekawości musimy ustawić kolumny e-maili, aby akceptowały również wartość „NULL”.
Otwórz plik migracji tabeli „users” 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();
});
}
Następnie uruchom komendę migracji, która utworzy tabele w Twojej bazie danych.
php artisan migrate
Musisz również dodać kolumny provider
i provider_id
do modelu użytkownika.
aplikacja/Użytkownik.php
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password', 'provider', 'provider_id'
];
Uzyskaj dane logowania na Twittera
Ponieważ zamierzamy zintegrować logowanie do Twittera w Laravel, najpierw musisz uzyskać swoje dane logowania do Twittera. Wykonaj poniższe czynności, aby utworzyć aplikację na Twitterze i uzyskać swoje dane uwierzytelniające.
- Zaloguj się na konto programisty Twittera i utwórz nową aplikację.
- Wypełnij wszystkie wymagane pola, takie jak nazwa i opis aplikacji.
- Dodaj domenę swojej witryny w polu Witryna.
- Ustaw adres URL wywołania zwrotnego jako
http://localhost:8000/twitter/callback
. Dostosuj adres URL zgodnie z wymaganiami. - Po zarejestrowaniu skopiuj i wklej utworzone poświadczenia aplikacji (klucz klienta i klucz tajny), które wymagają za jakiś czas.
Używając tych skopiowanych danych uwierzytelniających, Twoja aplikacja Laravel zakończy przepływ OAuth, gdy użytkownicy zalogują się na swoje konto na Twitterze.
Twórz trasy i kontroler
Aby uwzględnić funkcjonalność logowania przez Twittera, musimy dodać kod w naszym projekcie Laravel. Stwórzmy za LoginController
pomocą polecenia:
php artisan make:controller LoginController
Musimy dodać link do logowania w pliku ostrza. Utwórz login.blade.php
i dodaj do niego następujący kod HTML.
<a href="{{ url('/login/twitter') }}" class="btn btn-success">
{{ __('Login with Twitter') }}
</a>
Możesz wywołać ten widok z index
metody LoginController
.
/**
* Call the view
*/
public function index()
{
return view('login');
}
Następnie dodaj dla niego trasę. 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 Twitterze, przekieruję go na home
trasę. To tylko do celów demonstracyjnych. Powinieneś zmienić tę trasę na coś innego.
Zaloguj się przez Twittera w Laravel
Czas skorzystać z pakietu Socialite. Za pomocą poniższego polecenia możesz zainstalować pakiet Socialite w swoim projekcie Laravel.
composer require laravel/socialite
Po zainstalowaniu Socialite musimy go skonfigurować. Otwórz config/services.php
i dodaj konfigurację Twittera do tego pliku w następujący sposób:
'twitter' => [
'client_id' => env('TWITTER_API_KEY'),
'client_secret' => env('TWITTER_API_SECRET_KEY'),
'redirect' => env('TWITTER_CALLBACK_URL'),
],
Możesz zauważyć, że użyłem tej env
metody, aby uzyskać określone wartości. Oznacza to, że musimy zdefiniować te stałe w .env
pliku.
TWITTER_API_KEY=PASTE_TWITTER_API_KEY
TWITTER_API_SECRET_KEY=PASTE_TWITTER_API_SECRET_KEY
TWITTER_CALLBACK_URL=http://localhost:8000/twitter/callback
Pamiętaj, aby zastąpić symbole zastępcze rzeczywistymi kluczami API. Następnie w LoginController
, piszemy funkcję, która przekierowuje użytkownika na stronę logowania Twittera, a po udanej autoryzacji zaloguje go.
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
]);
}
}
Przejdź do strony logowania i kliknij link „Zaloguj się za pomocą Twittera”. Zakończ proces i zaloguj się do systemu za pomocą Twittera. W users
tabeli można również znaleźć wpisy użytkowników .
Mam nadzieję, że możesz dowiedzieć się o logowaniu za pomocą Twittera w Laravel za pomocą pakietu Socialite. Chciałbym usłyszeć Twoje przemyślenia lub sugestie w sekcji komentarzy poniżej.
Powiązane artykuły
- Zaloguj się na LinkedIn w Laravel za pomocą Laravel Socialite
- Zaloguj się przez Google w Laravel za pomocą Laravel Socialite