Laravel-5.png

Laravel Socialite là gì?

  • 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
  • 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ác bước setting

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": "^[email protected]"
    },

    ...
}

Sau đó đăng ký Service ProviderFacede 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 :

IMG_9232.JPG

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

Basic Usage

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:

  1. route redirect user tới OAuth provider (cụ thể là Github)
  2. 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', '[email protected]');
Route::get('auth/github/callback', '[email protected]');

...
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('/');
    }
}

Giải thích luồng xử lý

Luồng xử lý đơn giản được hiểu như sau:

  1. User truy cập vào auth/github
  2. 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
  3. 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
  4. Lưu thông tin user và đăng nhập

Link tham khảo

  1. http://readouble.com/laravel/5/1/en/authentication.html
  2. http://www.codeanchor.net/blog/complete-laravel-socialite-tutorial/