{"id":29444,"date":"2021-06-12T13:07:00","date_gmt":"2021-06-12T10:07:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29444"},"modified":"2021-10-17T04:17:49","modified_gmt":"2021-10-17T01:17:49","slug":"logga-in-med-linkedin-i-laravel-med-laravel-socialite","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/sv\/logga-in-med-linkedin-i-laravel-med-laravel-socialite\/","title":{"rendered":"Logga in med LinkedIn i Laravel med Laravel Socialite"},"content":{"rendered":"<p>Att l\u00e4gga till socialt inloggningssystem p\u00e5 webbplatsen \u00e4r trenden idag. Genom att integrera social inloggning hoppar det \u00f6ver anv\u00e4ndarens verifieringsprocess. Sociala webbplatser har redan verifierat anv\u00e4ndare s\u00e5 att v\u00e5r applikation inte beh\u00f6ver f\u00f6lja samma process med en anv\u00e4ndare. Vi kan lita p\u00e5 sociala webbplatser och l\u00e5ta anv\u00e4ndaren anv\u00e4nda v\u00e5rt system om de loggar in via en social webbplats p\u00e5 v\u00e5r webbplats. Facebook, Twitter, Google, LinkedIn \u00e4r popul\u00e4ra sociala webbplatser som normalt integreras som en social inloggning p\u00e5 webbplatsen. I den h\u00e4r artikeln kommer vi att t\u00e4cka inloggning med LinkedIn i Laravel.<\/p>\n<p>F\u00f6r v\u00e5r handledning integrerar jag LinkedIn-inloggning p\u00e5 den nya Laravel-installationen. Jag ska installera Laravel, skapa en &quot;anv\u00e4ndartabell&quot; och installera de paket som kr\u00e4vs f\u00f6r att integrera det sociala inloggningssystemet.<\/p>\n<p>K\u00f6r kommandot nedan f\u00f6r att installera Laravel. H\u00e4r skapar jag ett projekt som &#8217;linkedinlogin&#8217;.<\/p>\n<pre><code>composer create-project --prefer-dist laravel\/laravel linkedinlogin<\/code><\/pre>\n<p>Efter installationen skapar du databasen och anger autentiseringsuppgifterna i <code>.env<\/code>filen. Vi bygger ett inloggningssystem s\u00e5 vi b\u00f6r lagra anv\u00e4ndarinformation i databasen.<\/p>\n<p>Denna handledning \u00e4r baserad p\u00e5 LinkedIn-inloggning s\u00e5 att vi f\u00e5r anv\u00e4ndarens LinkedIn-profil-ID efter framg\u00e5ngsrik autentisering. F\u00f6r att lagra detta sociala id l\u00e4gger vi till kolumner leverant\u00f6r och provider_id. H\u00e4r sparar leverant\u00f6rskolumnen v\u00e4rdet &#8217;linkedin&#8217; och provider_id lagrar anv\u00e4ndarens sociala id.<\/p>\n<p>N\u00e4r vi anv\u00e4nde social inloggning beh\u00f6ver vi inte lagra l\u00f6senord s\u00e5 l\u00f6senordskolumnv\u00e4rdet ska acceptera &#8217;NULL&#8217; 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-postkolumnen f\u00f6r att acceptera &#8217;NULL&#8217;.<\/p>\n<p>\u00d6ppna migrationsfilen f\u00f6r anv\u00e4ndartabellen 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>K\u00f6r kommandot nedan som skapar tabellerna i v\u00e5r databas.<\/p>\n<pre><code>php artisan migrate<\/code><\/pre>\n<p>Vi m\u00e5ste ocks\u00e5 l\u00e4gga till dessa tv\u00e5 kolumner i v\u00e5r anv\u00e4ndarmodell.<\/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>Skapa LinkedIn-applikation<\/h3>\n<p>F\u00f6r att integrera LinkedIn-inloggningen b\u00f6r du skapa applikationen p\u00e5 ditt LinkedIn-konto. Vi beh\u00f6ver klient-id, klienthemlighet f\u00f6r LinkedIn-applikationen. Vi m\u00e5ste ocks\u00e5 ange en auktoriserad omdirigerings-URL i applikationen.<\/p>\n<ul>\n<li>G\u00e5 till <a href=\"https:\/\/www.linkedin.com\/secure\/developer\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">LinkedIn Developer Network<\/a>.<\/li>\n<li>Klicka p\u00e5 knappen &#8217;Skapa applikation&#8217;.<\/li>\n<li>Fyll i informationen p\u00e5 formul\u00e4ret.<\/li>\n<li>L\u00e4gg till <code>http:\/\/localhost:8000\/linkedin\/callback<\/code>i f\u00e4ltet Auktoriserade omdirigeringsadresser.<\/li>\n<li>Kopiera klient-ID och klienthemliga nycklar.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20253-6081d37e35c27.png\"><\/a><\/p>\n<p>Efter ovanst\u00e5ende steg m\u00e5ste du l\u00e4gga till produkten &#8217;Logga in med LinkedIn&#8217; i din LinkedIn-applikation. Klicka p\u00e5 fliken &quot;produkter&quot; och v\u00e4lj &quot;Logga in med LinkedIn&quot;. N\u00e4r du v\u00e4ljer den h\u00e4r produkten kommer den att granskas och sedan inkluderas som en tillagd produkt. Detta kan ta lite tid f\u00f6r granskning. I mitt fall tog det cirka tio minuter.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20253-6081d37e35c27.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20253-6081d37e35c27.png\" alt=\"Logga in med LinkedIn i Laravel med Laravel Socialite\" ><\/a><\/p>\n<h3>Skapa rutter och kontroller<\/h3>\n<p>Vi kan nu b\u00f6rja l\u00e4gga till en kod i Laravel. Skapa en styrenhet <code>LoginController<\/code>med kommandot:<\/p>\n<pre><code>php artisan make:controller LoginController<\/code><\/pre>\n<p>Skapa sedan en bladfil <code>login.blade.php<\/code>och l\u00e4gg till f\u00f6ljande HTML i den.<\/p>\n<pre><code>&lt;a href=\"{{ url('\/login\/linkedin') }}\"&gt;\n\u00a0\u00a0\u00a0\u00a0{{ __('Login with LinkedIn') }}\n&lt;\/a&gt;<\/code><\/pre>\n<p>Kalla denna vy fr\u00e5n <code>index<\/code>metoden enligt <code>LoginController<\/code>f\u00f6ljande.<\/p>\n<pre><code>public function index()\n{\n\u00a0\u00a0\u00a0\u00a0return view('login');\n}<\/code><\/pre>\n<p>L\u00e5t oss definiera rutterna f\u00f6r det. Jag l\u00e4gger ocks\u00e5 till n\u00e5gra fler rutter som kommer att kr\u00e4vas i 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>N\u00e4r en anv\u00e4ndare loggar in med LinkedIn 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 LinkedIn Laravel<\/h3>\n<p>Laravel har ett officiellt paket Socialite. Detta paket hj\u00e4lper oss att enkelt integrera det sociala inloggningssystemet i Laravel. Installera detta paket med kommandot:<\/p>\n<pre><code>composer require laravel\/socialite<\/code><\/pre>\n<p>N\u00e4r du har installerat biblioteket \u00f6ppnar du <code>config\/services.php<\/code>och l\u00e4gger till LinkedIn-konfiguration enligt f\u00f6ljande:<\/p>\n<pre><code>'linkedin' =&gt; [\n\u00a0\u00a0\u00a0\u00a0'client_id' =&gt; env('LINKEDIN_CLIENT_ID'),\n\u00a0\u00a0\u00a0\u00a0'client_secret' =&gt; env('LINKEDIN_CLIENT_SECRET'),\n\u00a0\u00a0\u00a0\u00a0'redirect' =&gt; env('LINKEDIN_CALLBACK_URL'),\n],<\/code><\/pre>\n<p>Nu m\u00e5ste vi l\u00e4gga till v\u00e5ra konstanta v\u00e4rden i <code>.env<\/code>filen.<\/p>\n<pre><code>LINKEDIN_CLIENT_ID=YOUR_CLIENT_ID\nLINKEDIN_CLIENT_SECRET=YOUR_CLIENT_SECRET\nLINKEDIN_CALLBACK_URL=http:\/\/localhost:8000\/linkedin\/callback<\/code><\/pre>\n<p>Se till att ers\u00e4tta platsh\u00e5llare med deras faktiska v\u00e4rden. De slutliga justeringarna b\u00f6r ing\u00e5 i <code>LoginController.php<\/code>filen. I den h\u00e4r filen skriver vi en funktion som omdirigerar en anv\u00e4ndare till LinkedIn-inloggningssidan, och vid 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\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\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Redirect the user to the Linkedin 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;scopes(['r_liteprofile', 'r_emailaddress'])-&gt;redirect();\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Obtain the user information from Linkedin.\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\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>I v\u00e5rt <code>LoginController<\/code>st\u00e4ller vi in \u200b\u200bde omfattningar <code>['r_liteprofile',\u00a0'r_emailaddress']<\/code>som kr\u00e4vs f\u00f6r att h\u00e4mta grundl\u00e4ggande information om en LinkedIn-anv\u00e4ndare. I \u00e5teruppringningsmetoden kontrollerar vi om anv\u00e4ndaren finns och om det inte \u00e4r det, l\u00e4gg till anv\u00e4ndaren i databasen.<\/p>\n<p>Jag hoppas att du f\u00f6rst\u00e5r hur du loggar in med LinkedIn i Laravel. Jag skulle vilja h\u00f6ra dina tankar och f\u00f6rslag i kommentarsektionen nedan.<\/p>\n<h4>relaterade artiklar<\/h4>\n<ul>\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<li><a href=\"https:\/\/themewp.inform.click\/sv\/hur-man-lagger-till-google-oauth-inloggning-pa-webbplatsen-med-php\/\" title=\"Hur man l\u00e4gger till Google OAuth-inloggning p\u00e5 webbplatsen med PHP\">Hur man l\u00e4gger till Google OAuth-inloggning p\u00e5 webbplatsen med PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/skapa-flersprakig-webbplats-i-php-med-hjalp-av-laravel-framework\/\" title=\"Skapa flerspr\u00e5kig webbplats i PHP med hj\u00e4lp av Laravel Framework\">Skapa flerspr\u00e5kig webbplats i PHP med hj\u00e4lp av Laravel Framework<\/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 den h\u00e4r artikeln visar jag dig hur du l\u00e4gger till inloggning med LinkedIn med Laravel Socialite i din Laravel-applikation. Anv\u00e4nda sociala inloggning dina anv\u00e4ndare<\/p>\n","protected":false},"author":1,"featured_media":20254,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[503],"tags":[850],"class_list":["post-29444","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\/29444","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=29444"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/29444\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media\/20254"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media?parent=29444"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/categories?post=29444"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/tags?post=29444"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}