{"id":29455,"date":"2021-06-12T18:15:00","date_gmt":"2021-06-12T15:15:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29455"},"modified":"2021-10-17T04:17:32","modified_gmt":"2021-10-17T01:17:32","slug":"logga-in-med-twitter-i-laravel-med-laravel-socialite","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/sv\/logga-in-med-twitter-i-laravel-med-laravel-socialite\/","title":{"rendered":"Logga in med Twitter i Laravel med Laravel Socialite"},"content":{"rendered":"<p>Nyligen har jag publicerat en artikel om <a href=\"https:\/\/themewp.inform.click\/sv\/hur-man-lagger-till-twitter-oauth-inloggning-pa-webbplatsen-med-php\/\" title=\"inloggning med Twitter i PHP\" >inloggning med Twitter i PHP<\/a>. En av v\u00e5ra l\u00e4sare bad att skriva en artikel om inloggning med Twitter i Laravel. \u00c4ven om Laravel bygger p\u00e5 PHP-programmeringsspr\u00e5ket och jag skrev om Twitter-inloggning i PHP vet jag att tidigare handledning inte \u00e4r l\u00e4mplig f\u00f6r Laravel-ramverket. Laravel har sin egen mappstruktur, utvecklingsfl\u00f6de. En utvecklare b\u00f6r f\u00f6lja Laravels standarder medan de bygger webbapplikationer i den.<\/p>\n<p>Laravel har sina officiella paket som hj\u00e4lper utvecklare att uppn\u00e5 viss funktionalitet. Ett av paketen \u00e4r <a href=\"https:\/\/laravel.com\/docs\/master\/socialite\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Socialite<\/a>. Med Socialite kan du integrera social inloggning med olika leverant\u00f6rer som Facebook, Twitter, LinkedIn, Google, etc.<\/p>\n<p>I den h\u00e4r artikeln studerar vi <strong>inloggning med Twitter i Laravel<\/strong> med Laravel Socialite.<\/p>\n<h3>Komma ig\u00e5ng<\/h3>\n<p>L\u00e5t oss b\u00f6rja med den nya Laravel-installationen. Det \u00e4r inte obligatoriskt att anv\u00e4nda en ny Laravel-installation, du kan ocks\u00e5 anv\u00e4nda ditt befintliga projekt.<\/p>\n<p>F\u00f6r att installera senaste Laravel, k\u00f6r kommandot nedan:<\/p>\n<pre><code>composer create-project --prefer-dist laravel\/laravel twitterlogin<\/code><\/pre>\n<p>Efter installationen skapar du databasen och l\u00e4gger till referenserna i <code>.env<\/code>filen. Vi bygger ett inloggningssystem s\u00e5 vi b\u00f6r lagra anv\u00e4ndarinformation i databasen.<\/p>\n<p>Denna handledning baseras p\u00e5 Logga in med Twitter s\u00e5 att vi f\u00e5r anv\u00e4ndarens Twitter-id efter framg\u00e5ngsrik autentisering. F\u00f6r att lagra detta sociala id l\u00e4gger vi till kolumner <code>provider<\/code>och <code>provider_id<\/code>i tabellen &quot;anv\u00e4ndare&quot;. Kolumnen <code>provider<\/code>lagrar v\u00e4rdet som &#8217;twitter&#8217; och en kolumn <code>provider_id<\/code>\u00e4r f\u00f6r anv\u00e4ndarens Twitter-id.<\/p>\n<p>N\u00e4r vi anv\u00e4nder social inloggning beh\u00f6ver vi inte lagra l\u00f6senord s\u00e5 l\u00f6senordskolumnen ska acceptera &quot;NULL&quot; -v\u00e4rdet som standard. Det finns ingen garanti f\u00f6r att f\u00e5 anv\u00e4ndarens e-post efter social inloggning, s\u00e5 f\u00f6r nyfikenhet m\u00e5ste vi st\u00e4lla in e-postkolumner f\u00f6r att acceptera &quot;NULL&quot; -v\u00e4rdet.<\/p>\n<p>\u00d6ppna migreringsfilen &#8217;anv\u00e4ndare&#8217; i tabellen och l\u00e4gg till koden nedan.<\/p>\n<pre><code>\/**\n\u00a0* Run the migrations.\n\u00a0*\n\u00a0* @return void\n\u00a0*\/\npublic function up()\n{\n\u00a0\u00a0\u00a0\u00a0Schema::create('users', function (Blueprint $table) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;increments('id');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('name');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('email')-&gt;nullable();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;timestamp('email_verified_at')-&gt;nullable();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('password')-&gt;nullable();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('provider');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('provider_id');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;rememberToken();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;timestamps();\n\u00a0\u00a0\u00a0\u00a0});\n}<\/code><\/pre>\n<p>Efter detta k\u00f6r du migreringskommandot som skapar tabeller i din databas.<\/p>\n<pre><code>php artisan migrate<\/code><\/pre>\n<p>Du m\u00e5ste ocks\u00e5 l\u00e4gga till <code>provider<\/code>och <code>provider_id<\/code>kolumner i anv\u00e4ndarmodellen.<\/p>\n<p><strong>app \/ User.php<\/strong><\/p>\n<pre><code>\/**\n\u00a0* The attributes that are mass assignable.\n\u00a0*\n\u00a0* @var array\n\u00a0*\/\nprotected $fillable = [\n\u00a0\u00a0\u00a0\u00a0'name', 'email', 'password', 'provider', 'provider_id'\n];<\/code><\/pre>\n<h3>Skaffa Twitter-referenser<\/h3>\n<p>Eftersom vi ska integrera Twitter-inloggning i Laravel m\u00e5ste du f\u00f6rst f\u00e5 dina Twitter-referenser. F\u00f6lj stegen nedan f\u00f6r att skapa en Twitter-app och f\u00e5 dina uppgifter.<\/p>\n<ul>\n<li>Logga in p\u00e5 <a href=\"https:\/\/dev.twitter.com\/apps\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Twitter-utvecklarkontot<\/a> och skapa en ny applikation.<\/li>\n<li>Fyll i alla obligatoriska f\u00e4lt, t.ex. applikationsnamn och beskrivning.<\/li>\n<li>L\u00e4gg till din webbplatsdom\u00e4n i f\u00e4ltet Webbplats.<\/li>\n<li>Ange URL f\u00f6r \u00e5teruppringning som <code>http:\/\/localhost:8000\/twitter\/callback<\/code>. Justera webbadressen enligt dina krav.<\/li>\n<li>N\u00e4r du har registrerat dig kopierar du och klistrar in de skapade ans\u00f6kningsuppgifterna (konsumentnyckel och hemlighet) som kr\u00e4vs under en tid.<\/li>\n<\/ul>\n<p>Med dessa kopierade referenser kommer din Laravel-applikation att slutf\u00f6ra OAuth-fl\u00f6de n\u00e4r anv\u00e4ndare loggar in med sitt Twitter-konto.<\/p>\n<h3>Skapa rutter och kontroller<\/h3>\n<p>F\u00f6r att inkludera inloggningsfunktionaliteten med Twitter m\u00e5ste vi l\u00e4gga till en kod i v\u00e5rt Laravel-projekt. L\u00e5t oss skapa ett <code>LoginController<\/code>med kommandot:<\/p>\n<pre><code>php artisan make:controller LoginController<\/code><\/pre>\n<p>Vi m\u00e5ste l\u00e4gga till en inloggningsl\u00e4nk i bladfilen. Skapa a <code>login.blade.php<\/code>och l\u00e4gg till f\u00f6ljande HTML i den.<\/p>\n<pre><code>&lt;a href=\"{{ url('\/login\/twitter') }}\" class=\"btn btn-success\"&gt;\n\u00a0\u00a0\u00a0\u00a0{{ __('Login with Twitter') }}\n&lt;\/a&gt;<\/code><\/pre>\n<p>Du kan ringa den h\u00e4r vyn fr\u00e5n <code>index<\/code>metoden f\u00f6r <code>LoginController<\/code>.<\/p>\n<pre><code>\/**\n\u00a0* Call the view\n\u00a0*\/\npublic function index()\n{\n\u00a0\u00a0\u00a0\u00a0return view('login');\n}<\/code><\/pre>\n<p>L\u00e4gg sedan till rutten f\u00f6r den. Jag l\u00e4gger ocks\u00e5 till n\u00e5gra fler rutter som kr\u00e4vs f\u00f6r n\u00e4sta del av handledningen.<\/p>\n<pre><code>Route::get('login', 'LoginController@index');\nRoute::get('login\/{provider}', 'LoginController@redirectToProvider');\nRoute::get('{provider}\/callback', 'LoginController@handleProviderCallback');\nRoute::get('\/home', function() {\n\u00a0\u00a0\u00a0\u00a0return 'User is logged in';\n});<\/code><\/pre>\n<p>Efter att anv\u00e4ndaren har loggat in med Twitter kommer jag att omdirigera dem till <code>home<\/code>rutten. Det \u00e4r bara f\u00f6r demo\u00e4ndam\u00e5l. Du b\u00f6r \u00e4ndra denna rutt till n\u00e5got annat.<\/p>\n<h3>Logga in med Twitter i Laravel<\/h3>\n<p>Det \u00e4r dags att anv\u00e4nda Socialite-paketet nu. Med kommandot nedan kan du installera Socialite-paketet i ditt Laravel-projekt.<\/p>\n<pre><code>composer require laravel\/socialite<\/code><\/pre>\n<p>Efter installationen av Socialite m\u00e5ste vi konfigurera den. \u00d6ppna <code>config\/services.php<\/code>och l\u00e4gg till Twitter-konfiguration i den h\u00e4r filen p\u00e5 f\u00f6ljande s\u00e4tt:<\/p>\n<pre><code>'twitter' =&gt; [\n\u00a0\u00a0\u00a0\u00a0'client_id' =&gt; env('TWITTER_API_KEY'),\n\u00a0\u00a0\u00a0\u00a0'client_secret' =&gt; env('TWITTER_API_SECRET_KEY'),\n\u00a0\u00a0\u00a0\u00a0'redirect' =&gt; env('TWITTER_CALLBACK_URL'),\n],<\/code><\/pre>\n<p>Du kanske m\u00e4rker att jag anv\u00e4nde <code>env<\/code>metoden f\u00f6r att f\u00e5 de angivna v\u00e4rdena. Det betyder att vi m\u00e5ste definiera dessa konstanter i <code>.env<\/code>filen.<\/p>\n<pre><code>TWITTER_API_KEY=PASTE_TWITTER_API_KEY\nTWITTER_API_SECRET_KEY=PASTE_TWITTER_API_SECRET_KEY\nTWITTER_CALLBACK_URL=http:\/\/localhost:8000\/twitter\/callback<\/code><\/pre>\n<p>Se till att ers\u00e4tta platsh\u00e5llarna med dina faktiska API-nycklar. N\u00e4sta i <code>LoginController<\/code>, vi skriver en funktion som omdirigerar en anv\u00e4ndare till Twitter-inloggningssidan, och efter lyckad auktorisering kommer den att logga in anv\u00e4ndaren.<\/p>\n<p><strong>LoginController.php<\/strong><\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllers;\n\u00a0\nuse IlluminateHttpRequest;\nuse Socialite;\nuse AppModelsUser;\nuse Auth;\n\u00a0\nclass LoginController extends Controller\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Where to redirect users after login.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @var string\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0protected $redirectTo = '\/home';\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Call the view\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function index()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return view('login');\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Redirect the user to the Twitter authentication page.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return Response\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function redirectToProvider($provider)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return Socialite::driver($provider)-&gt;redirect();\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Obtain the user information from Twitter.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return Response\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function handleProviderCallback($provider)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$user = Socialite::driver($provider)-&gt;user();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$authUser = $this-&gt;findOrCreateUser($user, $provider);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Auth::login($authUser, true);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return redirect($this-&gt;redirectTo);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* If a user has registered before using social auth, return the user\n\u00a0\u00a0\u00a0\u00a0\u00a0* else, create a new user object.\n\u00a0\u00a0\u00a0\u00a0\u00a0* @param\u00a0 $user Socialite user object\n\u00a0\u00a0\u00a0\u00a0\u00a0* @param $provider Social auth provider\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return\u00a0 User\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function findOrCreateUser($user, $provider)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$authUser = User::where('provider_id', $user-&gt;id)-&gt;first();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($authUser) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return $authUser;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return User::create([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'name'\u00a0\u00a0\u00a0\u00a0 =&gt; $user-&gt;name,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'email'\u00a0\u00a0\u00a0 =&gt; $user-&gt;email,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'provider' =&gt; $provider,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'provider_id' =&gt; $user-&gt;id\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>G\u00e5 \u00f6ver till inloggningssidan och klicka p\u00e5 l\u00e4nken &quot;Logga in med Twitter&quot;. Slutf\u00f6r processen och du b\u00f6r logga in p\u00e5 systemet med Twitter. Du kan ocks\u00e5 hitta poster f\u00f6r anv\u00e4ndare i <code>users<\/code>tabellen.<\/p>\n<p>Jag hoppas att du kan l\u00e4ra dig mer om inloggning med Twitter i Laravel med hj\u00e4lp av Socialite-paketet. Jag skulle vilja h\u00f6ra dina tankar eller f\u00f6rslag i kommentarsektionen nedan.<\/p>\n<h4>relaterade artiklar<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/logga-in-med-linkedin-i-laravel-med-laravel-socialite\/\" title=\"Logga in med LinkedIn i Laravel med Laravel Socialite\">Logga in med LinkedIn i Laravel med Laravel Socialite<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/google-inloggning-i-laravel-med-laravel-socialite\/\" title=\"Google-inloggning i Laravel med Laravel Socialite\">Google-inloggning i Laravel med Laravel Socialite<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I denna handledning studerar vi inloggning med Twitter i Laravel med hj\u00e4lp av Laravel Socialite-paketet. Social inloggning hj\u00e4lper dig att hoppa \u00f6ver hela<\/p>\n","protected":false},"author":1,"featured_media":20252,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[503],"tags":[850],"class_list":["post-29455","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel2-10","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/29455","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/comments?post=29455"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/29455\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media\/20252"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media?parent=29455"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/categories?post=29455"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/tags?post=29455"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}