...
✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

Logga in med Twitter i Laravel med Laravel Socialite

24

Nyligen har jag publicerat en artikel om inloggning med Twitter i PHP. En av våra läsare bad att skriva en artikel om inloggning med Twitter i Laravel. Även om Laravel bygger på PHP-programmeringsspråket och jag skrev om Twitter-inloggning i PHP vet jag att tidigare handledning inte är lämplig för Laravel-ramverket. Laravel har sin egen mappstruktur, utvecklingsflöde. En utvecklare bör följa Laravels standarder medan de bygger webbapplikationer i den.

Laravel har sina officiella paket som hjälper utvecklare att uppnå viss funktionalitet. Ett av paketen är Socialite. Med Socialite kan du integrera social inloggning med olika leverantörer som Facebook, Twitter, LinkedIn, Google, etc.

I den här artikeln studerar vi inloggning med Twitter i Laravel med Laravel Socialite.

Komma igång

Låt oss börja med den nya Laravel-installationen. Det är inte obligatoriskt att använda en ny Laravel-installation, du kan också använda ditt befintliga projekt.

För att installera senaste Laravel, kör kommandot nedan:

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

Efter installationen skapar du databasen och lägger till referenserna i .envfilen. Vi bygger ett inloggningssystem så vi bör lagra användarinformation i databasen.

Denna handledning baseras på Logga in med Twitter så att vi får användarens Twitter-id efter framgångsrik autentisering. För att lagra detta sociala id lägger vi till kolumner provideroch provider_idi tabellen "användare". Kolumnen providerlagrar värdet som ‘twitter’ och en kolumn provider_idär för användarens Twitter-id.

När vi använder social inloggning behöver vi inte lagra lösenord så lösenordskolumnen ska acceptera "NULL" -värdet som standard. Det finns ingen garanti för att få användarens e-post efter social inloggning, så för nyfikenhet måste vi ställa in e-postkolumner för att acceptera "NULL" -värdet.

Öppna migreringsfilen ‘användare’ i tabellen och lägg till koden nedan.

/**
 * 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();
    });
}

Efter detta kör du migreringskommandot som skapar tabeller i din databas.

php artisan migrate

Du måste också lägga till provideroch provider_idkolumner i användarmodellen.

app / User.php

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

Skaffa Twitter-referenser

Eftersom vi ska integrera Twitter-inloggning i Laravel måste du först få dina Twitter-referenser. Följ stegen nedan för att skapa en Twitter-app och få dina uppgifter.

  • Logga in på Twitter-utvecklarkontot och skapa en ny applikation.
  • Fyll i alla obligatoriska fält, t.ex. applikationsnamn och beskrivning.
  • Lägg till din webbplatsdomän i fältet Webbplats.
  • Ange URL för återuppringning som http://localhost:8000/twitter/callback. Justera webbadressen enligt dina krav.
  • När du har registrerat dig kopierar du och klistrar in de skapade ansökningsuppgifterna (konsumentnyckel och hemlighet) som krävs under en tid.

Med dessa kopierade referenser kommer din Laravel-applikation att slutföra OAuth-flöde när användare loggar in med sitt Twitter-konto.

Skapa rutter och kontroller

För att inkludera inloggningsfunktionaliteten med Twitter måste vi lägga till en kod i vårt Laravel-projekt. Låt oss skapa ett LoginControllermed kommandot:

php artisan make:controller LoginController

Vi måste lägga till en inloggningslänk i bladfilen. Skapa a login.blade.phpoch lägg till följande HTML i den.

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

Du kan ringa den här vyn från indexmetoden för LoginController.

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

Lägg sedan till rutten för den. Jag lägger också till några fler rutter som krävs för nästa del av handledningen.

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';
});

Efter att användaren har loggat in med Twitter kommer jag att omdirigera dem till homerutten. Det är bara för demoändamål. Du bör ändra denna rutt till något annat.

Logga in med Twitter i Laravel

Det är dags att använda Socialite-paketet nu. Med kommandot nedan kan du installera Socialite-paketet i ditt Laravel-projekt.

composer require laravel/socialite

Efter installationen av Socialite måste vi konfigurera den. Öppna config/services.phpoch lägg till Twitter-konfiguration i den här filen på följande sätt:

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

Du kanske märker att jag använde envmetoden för att få de angivna värdena. Det betyder att vi måste definiera dessa konstanter i .envfilen.

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

Se till att ersätta platshållarna med dina faktiska API-nycklar. Nästa i LoginController, vi skriver en funktion som omdirigerar en användare till Twitter-inloggningssidan, och efter lyckad auktorisering kommer den att logga in användaren.

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
        ]);
    }
}

Gå över till inloggningssidan och klicka på länken "Logga in med Twitter". Slutför processen och du bör logga in på systemet med Twitter. Du kan också hitta poster för användare i userstabellen.

Jag hoppas att du kan lära dig mer om inloggning med Twitter i Laravel med hjälp av Socialite-paketet. Jag skulle vilja höra dina tankar eller förslag i kommentarsektionen nedan.

relaterade artiklar

Inspelningskälla: artisansweb.net

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer