Laravel을 사용한 소셜 인증
양식을 채우고 이메일을 확인하는 엄격한 프로세스 없이 인증 프로세스를 매우 쉽게 수행할 수 있으므로 가입 및 서명에 소셜 계정을 사용하는 것이 점차 새로운 표준이 되고 있습니다.
이 자습서에서는 인증을 위해 Laravel Socialite을 사용하는 방법을 안내합니다.
이 튜토리얼에서는 소셜 로그인을 통합할 것입니다. 이것은 초보자용 가이드가 아니므로 Laravel 앱 설정이 있다고 가정합니다. Laravel Doc이 이에 대한 좋은 가이드입니다.
시작하자.
전제 조건
API ID
및 SECRET
를 얻으려면 소셜용 새 앱을 만들어야 합니다.Facebook , , Github 및 Google용 소셜 앱 만들기 가이드를 사용하세요.
설치
Laravel 앱에서 터미널에서 다음 명령을 실행합니다.
composer require laravel/socialite
그런 다음
config/services.php
로 이동하여 변수를 업데이트합니다.// Facebook Config
'facebook' => [
'client_id' => env('FACEBOOK_CLIENT_ID'), // Your Facebook App ID
'client_secret' => env('FACEBOOK_CLIENT_SECRET'), // Your Facebook App Secret
'redirect' => env('FACEBOOK_CALLBACK_URL')
],
// Twitter Config
'twitter' => [
'client_id' => env('TWITTER_CLIENT_ID'), // Your Twitter Client ID
'client_secret' => env('TWITTER_CLIENT_SECRET'), // Your Twitter Client Secret
'redirect' => env('TWITTER_CALLBACK_URL'),
],
// Github Config
'github' => [
'client_id' => env('GITHUB_CLIENT_ID'), // Your GitHub Client ID
'client_secret' => env('GITHUB_CLIENT_SECRET'), // Your GitHub Client Secret
'redirect' => env('GITHUB_CALLBACK_URL'),
],
// Google Config
'google' => [
'client_id' => env('GOOGLE_CLIENT_ID'), // Your Google Client ID
'client_secret' => env('GOOGLE_CLIENT_SECRET'), // Your Google Client Secret
'redirect' => env('GOOGLE_CALLBACK_URL'),
],
.env
를 다음과 같이 업데이트하십시오.FACEBOOK_CLIENT_ID=********
FACEBOOK_CLIENT_SECRET=********
FACEBOOK_CALLBACK_URL=https://app-url/login/facebook/callback
TWITTER_CLIENT_ID=********
TWITTER_CLIENT_SECRET=********
TWITTER_CALLBACK_URL=https://app-url/login/twitter/callback
GITHUB_CLIENT_ID=********
GITHUB_CLIENT_SECRET=********
GITHUB_CALLBACK_URL=https://app-url/login/github/callback
GOOGLE_CLIENT_ID=********
GOOGLE_CLIENT_SECRET=********
GOOGLE_CALLBACK_URL=https://app-url/login/google/callback
데이터베이스/마이그레이션
사용자 테이블을 수정하고
email
및 password
열을 null로 만들 수 있습니다.$table->string('email')->unique()->nullable();
$table->string('password')->nullable();
소셜 계정에 대해 다음 열을 추가하십시오.
$table->string('provider', 20)->nullable();
$table->string('provider_id')->nullable();
$table->string('access_token')->nullable();
명령줄에서 마이그레이션을 실행할 수 없습니다.
php artisan migrate
라우팅
이를 위해서는 두 개의 경로가 필요합니다. 하나는 공급자로 리디렉션하기 위한 것이고 다른 하나는 인증 후 공급자로부터 콜백을 받기 위한 것입니다.
routes/web.php
에 다음 경로를 추가합니다.Route::get('login/{provider}', 'AuthLoginController@redirectToProvider')->name('login.social');
Route::get('login/{provider}/callback','AuthLoginController@handleProviderCallback');
다음으로
LoginController
를 업데이트해야 합니다.Socialite
는 Socialite Facade을 사용하여 액세스됩니다.<?php
namespace App\Http\Controllers\Auth;
use Auth;
use Socialite;
use Carbon\Carbon;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
/**
* Redirect the user to the social authentication page.
* this includes GitHub, Twitter, Facebook, and Google
*
* @return Response
*/
public function redirectToProvider($provider)
{
return Socialite::driver($provider)->redirect();
}
/**
* Obtain the user information from Social Account.
*
* @return Response
*/
public function handleProviderCallback($provider)
{
try {
$providerUser= Socialite::driver($provider)->user();
} catch (Exception $e) {
return $this->sendFailedResponse($e->getMessage());
}
if ($user->email != null) {
$authUser = $this->findOrCreateUser($providerUser, $provider);
Auth::login($authUser, true);
return redirect()->intended('/');
}
return $this->sendFailedResponse();
}
/**
* If a user has registered before using social auth, return the user
* else, create a new user object.
* @param $providerUser Socialite user object
* @param $provider Social auth provider
* @return User
*/
public function findOrCreateUser($providerUser, $provider)
{
$authUser = User::where('email', $providerUser->email)->first();
if ($authUser) {
return $authUser;
} else {
$user = User::create([
'name' => $providerUser->name,
'email' => $providerUser->email,
'provider_id' => $providerUser->id,
'access_token' => $providerUser->token,
'provider_name' => $provider,
'email_verified_at' => Carbon::now()->format('Y-m-d H:i:s');
]);
}
return $user;
}
}
/**
* Send a failed response with a msg
*
* @param null $msg
* @return \Illuminate\Http\RedirectResponse
*/
protected function sendFailedResponse($message = null)
{
return redirect()->route('login')
->withError(['message' => $message ?: 'Unable to login, try with another provider to login.']);
}
마지막으로
blade
파일에서 등록 및 로그인 양식에 다양한 링크를 추가할 수 있습니다....
href="{{ route('login.social', 'facebook') }}"
href="{{ route('login.social', 'twitter') }}"
href="{{ route('login.social', 'github') }}"
href="{{ route('login.social', 'google') }}"
...
결론적으로
Laravel 앱에 소셜 로그인을 성공적으로 추가했습니다.
Reference
이 문제에 관하여(Laravel을 사용한 소셜 인증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jeremiahiro/social-authentication-with-laravel-1g7b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)