Social Login with Laravel Socialite
Là thư viện của Laravel hỗ trợ chức năng đăng nhập thông qua tài khoản của các dịch vụ social cung cấp OAuth Hiện tại, Socialite hỗ trợ việc đăng nhập sử dụng tài khoản của: Facebook Twitter LinkedIn Gooogle Github Bitbucket Được hỗ trợ từ phiên bản Laravel 5.0 trở lên ...
- Là thư viện của Laravel hỗ trợ chức năng đăng nhập thông qua tài khoản của các dịch vụ social cung cấp OAuth
- Hiện tại, Socialite hỗ trợ việc đăng nhập sử dụng tài khoản của:
- Gooogle
- Github
- Bitbucket
- Được hỗ trợ từ phiên bản Laravel 5.0 trở lên
- Có thể cài đặt dễ dàng thông qua composer
Bài viết này trình bày cách sử dụng Socialite đối với phiên bản Laravel 5.1 để đăng nhập sử dụng tài khoản Github
Cài pakage socialite vào ứng dụng
Chạy lệnh dưới đây để thêm socialite library vào ứng dụng
composer require laravel/socialite composer update
Sau khi cài đặt xong, bạn có thể kiểm tra gói socialite đã được thêm vào trong file composer.json:
{ ... "require": { "php": ">=5.5.9", "laravel/framework": "5.1.*", "laravel/socialite": "^3.0@dev" }, ... }
Sau đó đăng ký Service Provider và Facede của Socialite vào file setting của ứng dụng config/app.php:
config/app.php <?php ... 'providers' => [ ... LaravelSocialiteSocialiteServiceProvider::class, ], ... 'aliases' => [ ... 'Socialite' => LaravelSocialiteFacadesSocialite::class, ],
Đăng ký ứng dụng trên Github
Để sử dụng xác thực của Github bạn cần đăng ký ứng dụng trong trang setting của Github :
Bạn cần lưu ý , Authorization callback URL là URL của ứng dụng sẽ được redirect về sau khi thực hiện xác thực thành công
Sau khi đăng ký xong bạn sẽ nhận được ClientID và Client Secret dùng để setting phục vụ cho xác thực, bạn sẽ lưu những thông tin này vào file config/services.php
Đăng ký thông tin xác thực vào file setting của ứng dụng
Sau khi đăng ký ứng dụng trên Github, bạn copy ClientID và Client Secret vào file config/services.php :
config/services.php <?php return [ 'github' => [ 'client_id' => '...', 'client_secret' => '...', 'redirect' => 'http://localhost:8000/auth/login', ] ];
Trong đó, redirect chính là Authorization callback URL mà bạn đã đăng ký ở bước Đăng ký ứng dụng trên Github ở trên
Tới bước này ta đã hoàn tất việc chuẩn bị cho xác thực. Trong ứng dụng cần phải định nghĩa thêm 2 routes nữa:
- route redirect user tới OAuth provider (cụ thể là Github)
- route nhận calback từ provider sau khi xác thực thành công
/app/Http/routes.php <?php ... Route::get('auth/github', 'AuthAuthController@redirectToProvider'); Route::get('auth/github/callback', 'AuthAuthController@handleProviderCallback'); ...
app/Http/Controllers/Auth/AuthController.php <?php namespace AppHttpControllersAuth; ... use Socialite; ... class AuthController extends Controller { ... /** * Redirect the user to the Github authentication page * * @return Response */ public function redirectToProvider() { return Socialite::driver('github')->redirect(); } /** * Obtain the user information from Github * * @return Response */ public function handleProviderCallback() { // Get github's user infomation $user = Socialite::driver('github')->user(); // Create user $createdUser = User::firstOrCreate([ 'name' => $user->getName(), 'nickname' => $user->getNickname(), 'email' => $user->getEmail(), 'avatar' => $user->getAvatar(), 'social_id' => $user->getId(), 'token' => $user->token ]); Auth::login($createdUser); return redirect('/'); } }
Luồng xử lý đơn giản được hiểu như sau:
- User truy cập vào auth/github
- Socialite::driver('github')->redirect() được gọi, đoạn xử lý này làm nhiệm vụ redirect user tới trang xác thực của Github
- Sau khi xác thực thành công sẽ redirect về Authorization callback URL và thực hiện lấy dữ liệu của user
- Lưu thông tin user và đăng nhập
- http://readouble.com/laravel/5/1/en/authentication.html
- http://www.codeanchor.net/blog/complete-laravel-socialite-tutorial/