{"id":23336,"date":"2021-04-27T13:25:00","date_gmt":"2021-04-27T10:25:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=23336"},"modified":"2021-10-18T02:50:53","modified_gmt":"2021-10-17T23:50:53","slug":"social-login-system-mit-laravel-socialite","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/de\/social-login-system-mit-laravel-socialite\/","title":{"rendered":"Social Login-System mit Laravel Socialite"},"content":{"rendered":"<p>Credit: Dieser Artikel wurde von diesem Beitrag inspiriert <a href=\"https:\/\/scotch.io\/tutorials\/laravel-social-authentication-with-socialite\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel Social Authentication with Socialite<\/a><\/p>\n<p>M\u00f6chten Sie ein Social-Login-System in Ihre Laravel-Website implementieren? Durch das Zulassen von Social Login m\u00fcssen sich Ihre Benutzer nicht auf Ihrer Website registrieren. Es erspart uns auch viel Arbeit wie das Senden eines Aktivierungslinks, die \u00dcberpr\u00fcfung des E-Mail-Kontos. In diesem Artikel untersuchen wir, wie Sie mit Laravel socialite ein Social-Login-System hinzuf\u00fcgen.<\/p>\n<p><a href=\"https:\/\/github.com\/laravel\/socialite\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Die Laravel Socialite-<\/a> Bibliothek bietet OAuth-Authentifizierung mit Facebook, Twitter, Google, LinkedIn, GitHub und Bitbucket. Was wir tun m\u00fcssen, ist diese Bibliothek auf unserer Laravel-Website zu installieren, sie zu konfigurieren, API-Schl\u00fcssel von einer sozialen Website zu erhalten und wir k\u00f6nnen loslegen.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20876-60823669e70f3.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-20876-60823669e70f3.png\" alt=\"Social Login-System mit Laravel Socialite\" ><\/a><\/p>\n<h3>Benutzertabelle erstellen<\/h3>\n<p>Um ein Social Login-System zu implementieren, m\u00fcssen wir eine Benutzertabelle erstellen, in der die von der Social Site bereitgestellten Details gespeichert werden.<\/p>\n<p>Wenn Sie eine Neuinstallation von Laravel haben, \u00f6ffnen Sie das Befehlszeilentool im Stammverzeichnis eines Projekts und f\u00fchren Sie den Befehl aus <code>php artisan make:auth<\/code>. Dieser Befehl erstellt Authentifizierungscontroller wie LoginController, RegisterController usw., die sich im Verzeichnis app\/Http\/Controllers\/Auth befinden. Es erstellt auch eine Ansicht login.blade.php, register.blade.php im Verzeichnis resources\/view\/auth.<\/p>\n<p>\u00d6ffnen Sie als N\u00e4chstes die Tabelle Migration f\u00fcr Benutzer. Wir werden diese Standardmigration \u00e4ndern und zwei weitere Spalten namens provider und provider_id hinzuf\u00fcgen.<\/p>\n<pre><code>public 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;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>Wie Sie sehen, setzen wir die Spalten f\u00fcr E-Mail und Passwort auf nullable. Warum? Wenn wir Social Login-Authentifizierung verwenden, gibt es keine Garantie, eine E-Mail-ID eines Benutzers zu erhalten. Und das Passwort ist in diesem Fall auch nicht erforderlich. Also halten wir E-Mail und Passwort auf nullable. Der Spaltenanbieter speichert den Namen der sozialen Website wie Facebook, Twitter usw. Die Spalte provider_id speichert die soziale ID eines Benutzers in Bezug auf die soziale Website.<\/p>\n<p>Nachdem Sie Ihre Benutzermigration wie oben beschrieben ge\u00e4ndert haben, f\u00fchren Sie den Befehl aus <code>php artisan migrate<\/code>. Es wird eine Tabelle namens &#8218;users&#8216; in Ihrer Datenbank erstellen.<\/p>\n<p>Wahrscheinlich werden Sie beim Ausf\u00fchren des Migrationsbefehls einen seltsamen Fehler im Zusammenhang mit der Zeichenl\u00e4nge erhalten. \u00d6ffnen Sie in diesem Fall die Datei AppServiceProvider.php aus dem Verzeichnis app\/Providers. In dieser Datei m\u00fcssen wir die Standardzeichenfolgenl\u00e4nge f\u00fcr die Spalten einer Datenbanktabelle festlegen.<\/p>\n<p>Datei AppServiceProvider.php<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppProviders;\n\u00a0\nuse IlluminateSupportServiceProvider;\nuse IlluminateSupportFacadesSchema;\n\u00a0\nclass AppServiceProvider extends ServiceProvider\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Bootstrap any application services.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return void\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function boot()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Schema::defaultStringLength(255);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Register any application services.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return void\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function register()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<h3>Benutzermodell<\/h3>\n<p>Standardm\u00e4\u00dfig enth\u00e4lt Laravel ein AppUser Eloquent-Modell in Ihrem App-Verzeichnis. \u00d6ffnen Sie die User.php aus dem App-Ordner. F\u00fcgen Sie der Variablen $fillable zwei weitere Spalten provider, provider_id, hinzu.<\/p>\n<pre><code>protected $fillable = [\n\u00a0\u00a0\u00a0\u00a0'name', 'email', 'password', 'provider', 'provider_id',\n];<\/code><\/pre>\n<h3>Laravel Socialite installieren und konfigurieren<\/h3>\n<p>Um diese Bibliothek zu installieren, sollte <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composer<\/a> auf Ihrem System installiert sein.<\/p>\n<p>F\u00fchren Sie in Ihrem Befehlszeilentool den folgenden Befehl aus.<\/p>\n<p><code>composer require laravel\/socialite<\/code><\/p>\n<p>Registrieren Sie nach der Installation der Bibliothek LaravelSocialiteSocialiteServiceProvider in Ihrer Konfigurationsdatei config\/app.php.<\/p>\n<pre><code>'providers' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\/\/ Other service providers...\n\u00a0\n\u00a0\u00a0\u00a0\u00a0LaravelSocialiteSocialiteServiceProvider::class,\n],<\/code><\/pre>\n<p>F\u00fcgen Sie in derselben Datei config\/app.php unter dem aliases-Array die Socialite-Fassade hinzu.<\/p>\n<pre><code>'Socialite' =&gt; LaravelSocialiteFacadesSocialite::class,<\/code><\/pre>\n<p>Jetzt ist es an der Zeit, Ihre Anwendung auf einer sozialen Website zu registrieren. Wir gehen beispielsweise davon aus, dass Sie die Facebook-Login-Authentifizierung implementieren m\u00f6chten. Also mach weiter und <a href=\"https:\/\/developers.facebook.com\/docs\/apps\/register\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">erstelle eine Anwendung auf Facebook<\/a>.<\/p>\n<p>Sobald Sie mit der App-ID und dem App-Geheimnis Ihrer Facebook-Anwendung fertig sind, \u00f6ffnen Sie die Datei config\/services.php und f\u00fcgen Sie den folgenden Code hinzu.<\/p>\n<pre><code>'facebook' =&gt; [\n\u00a0\u00a0\u00a0\u00a0'client_id' =&gt; env('FB_APP_ID'),\n\u00a0\u00a0\u00a0\u00a0'client_secret' =&gt; env('FB_APP_SECRET'),\n\u00a0\u00a0\u00a0\u00a0'redirect' =&gt; env('FB_CALLBACK_URL'),\n],<\/code><\/pre>\n<p>Wie im obigen Code gezeigt, m\u00fcssen wir unsere Bewerbungsdetails und die R\u00fcckruf-URL in der .env-Datei speichern.<\/p>\n<pre><code>FB_APP_ID=PASTE_APP_ID_HERE\nFB_APP_SECRET=PASTE_APP_SECRET_HERE\nFB_CALLBACK_URL=YOU_SITE_URL\/login\/facebook\/callback<\/code><\/pre>\n<p>Wir haben die R\u00fcckruf-URL als YOU_SITE_URL\/login\/facebook\/callback \u00fcbergeben. Jetzt ist es an der Zeit, zwei Routen zu erstellen, eine zum Umleiten des Benutzers zum OAuth-Anbieter (in unserem Fall Facebook) und eine andere zum Empfangen des R\u00fcckrufs vom Anbieter nach der Authentifizierung.<\/p>\n<h3>Tats\u00e4chlicher Code f\u00fcr den Umgang mit OAuth<\/h3>\n<p>Zu diesem Zeitpunkt sind wir mit allen Einstellungen f\u00fcr Laravel Socialite abgeschlossen. Es ist an der Zeit, Code zu schreiben, der die Umleitung von OAuth verarbeitet und Benutzerdetails abruft.<\/p>\n<p>\u00d6ffnen Sie Ihre Datei login.blade.php und f\u00fcgen Sie den folgenden Code wahrscheinlich nach dem Absenden-Button ein.<\/p>\n<pre><code>&lt;div class=\"form-group\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;div class=\"col-md-6 col-md-offset-4\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Login with\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;a href=\"{{ url('\/login\/facebook') }}\"&gt;&lt;i class=\"fa fa-facebook-official\" aria-hidden=\"true\"&gt;&lt;\/i&gt; Facebook&lt;\/a&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;a href=\"{{ url('\/login\/twitter') }}\"&gt;&lt;i class=\"fa fa-twitter\" aria-hidden=\"true\"&gt;&lt;\/i&gt; Twitter&lt;\/a&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;a href=\"{{ url('\/login\/github') }}\"&gt;&lt;i class=\"fa fa-github\" aria-hidden=\"true\"&gt;&lt;\/i&gt; Github&lt;\/a&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>Hier f\u00fcgen wir einen Link f\u00fcr Github und Twitter hinzu. Die Schritte zum Hinzuf\u00fcgen von OAuth f\u00fcr diese sozialen Websites sind auch dieselben wie bei Facebook. Sie m\u00fcssen nur eine Anwendung der entsprechenden sozialen Websites erstellen und diese Details auf die gleiche Weise speichern, wie wir sie f\u00fcr Facebook hinzugef\u00fcgt haben.<\/p>\n<p>Definieren Sie in Ihrer Routendatei die Routen wie unten beschrieben.<\/p>\n<pre><code>Route::get('login\/{provider}', 'AuthLoginController@redirectToProvider');\nRoute::get('login\/{provider}\/callback', 'AuthLoginController@handleProviderCallback');<\/code><\/pre>\n<p>Navigieren Sie als N\u00e4chstes zu app\/Http\/Controllers\/Auth\/LoginController.php und \u00e4ndern Sie die Datei. Sie sollten den folgenden Code hinzuf\u00fcgen.<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllersAuth;\n\u00a0\nuse AppHttpControllersController;\nuse IlluminateFoundationAuthAuthenticatesUsers;\nuse Socialite;\nuse AppUser;\nuse Auth;\n\u00a0\nclass LoginController extends Controller\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Redirect the user to the GitHub 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(['email'])-&gt;redirect();\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Obtain the user information from GitHub.\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\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>Die Methode redirectToProvider leitet den Benutzer auf die Anmeldeseite einer sozialen Website um. Sobald der Benutzer die Anwendung autorisiert, holen wir die Benutzerinformationen in der Funktion handleProviderCallback ab. Wenn der Benutzer in unserem System nicht existiert, f\u00fcgen wir seine Daten mit der Methode findOrCreateUser hinzu.<\/p>\n<p>Wir hoffen, dass Sie das Social Login-System mit Laravel Socialite kennengelernt haben. Wenn Sie Fragen oder Anregungen haben, hinterlassen Sie bitte unten einen Kommentar.<\/p>\n<h4>Zum Thema passende Artikel<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/so-verwenden-sie-die-funktion-fuer-mehrere-datenbankverbindungen-von-laravel-auf-einer-website\/\" title=\"So verwenden Sie die Funktion f\u00fcr mehrere Datenbankverbindungen von Laravel auf einer Website\">So verwenden Sie die Funktion f\u00fcr mehrere Datenbankverbindungen von Laravel auf einer Website<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/de\/erstellen-sie-eine-mehrsprachige-website-in-php-mit-dem-laravel-framework\/\" title=\"Erstellen Sie eine mehrsprachige Website in PHP mit dem Laravel Framework\">Erstellen Sie eine mehrsprachige Website in PHP mit dem Laravel Framework<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Aufnahmequelle:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn Sie Ihrer Laravel-Website ein Social-Login-System hinzuf\u00fcgen m\u00f6chten, dann ist Laravel Socialite eine Bibliothek, die uns bei der Einrichtung dieses Systems hilft.<\/p>\n","protected":false},"author":1,"featured_media":21626,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[175,496],"tags":[845],"class_list":["post-23336","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-chrome-3","category-laravel","tag-affiai-de"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts\/23336","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/comments?post=23336"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/posts\/23336\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/media\/21626"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/media?parent=23336"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/categories?post=23336"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/de\/wp-json\/wp\/v2\/tags?post=23336"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}