07/09/2018, 17:47

Laravel đăng nhập thông qua các mạng xã hội Facebook, Google, Twitter, Github

Hôm nay mình xin giới thiệu một phương thức đăng nhập thông qua mạng xã hội phổ biến hiện nay như Facebook , Google , Twitter , Github , ... Đăng nhập thông qua mạng xã hội là một tính năng quan trọng ngoài cách đăng nhập thông thường, vì hiện nay số lượng người dùng mạng xã hội là rất ...

Hôm nay mình xin giới thiệu một phương thức đăng nhập thông qua mạng xã hội phổ biến hiện nay như Facebook, Google, Twitter, Github, ...

Đăng nhập thông qua mạng xã hội là một tính năng quan trọng ngoài cách đăng nhập thông thường, vì hiện nay số lượng người dùng mạng xã hội là rất lớn, tính tiện lợi khi đăng nhập bằng Social authentication.

Trong ví dụ hôm nay mình demo trên Facebook.

Hình ảnh demo

Laravel đăng nhập thông qua các mạng xã hội Facebook, Google

Bước 1: Cài đặt Laravel Socialite Package

Đây là package do chính Laravel cung cấp đó nha.

Mở terminal tại thư mục root website và chạy command sau để cài đặt:

composer require laravel/socialite

Sau khi cài đặt xong, chúng ta tiến hành thêm vào providers và aliases trong file config config/app.php (Bỏ qua bước này đối với laravel 5.5 trở đi)

'providers' => [
 ....
 LaravelSocialiteSocialiteServiceProvider::class,
],
'aliases' => [
 ....
 'Socialite' => LaravelSocialiteFacadesSocialite::class,
],

Bước 2: Tạo facebook app

Bước này chúng ta tiến hành tạo 1 app trên https://developers.facebook.com/apps/ và tiến hành tạo app. Cách tạo app cũng đơn giản không cần phải nói.

Laravel đăng nhập thông qua các mạng xã hội Facebook, Google

  • Sau khi tạo xong app, ở mục Thêm sản phẩm ⇒ Đăng nhập Facebook để có thể sử dụng tính năng.
  • Tab Xét duyệt ứng dụng tiến hành Nộp các mục để duyệt *(email, public_profile, user_friends)
  • Cũng tại tab Xét duyệt ứng dụng: Ứng dụng của bạn đang được phát triểnkhông khả dụng với mọi người. Bạn tiến hành click vào để ứng dụng được công khai nếu như bạn muốn đưa lên web server cho mọi người dùng.
  • Và cuối cùng tại tab Bảng điều khiển chúng ta có được: ID ứng dụng và Khóa bí mật của ứng dụng
  • Trong file config/services.php thêm 
'facebook' => [
    'client_id' => 'ID ứng dụng',
    'client_secret' => 'Khóa bí mật của ứng dụng',
    'redirect' => 'https://yourwebsite.com/auth/facebook/callback',
],

Sau sự cố bảo mật thông tin, FB đã thắc chặt chính sách hơn. Toàn bộ callback URL yêu cầu phải là https hết.

Nếu bạn làm localhost, cứ khai báo https://localhost/auth/facebook/callback

Sau đó truy cập https://localhost và làm theo hình sau:

https-localhost-proceed

Bước 3: Tạo facebook login

Facebook sẽ trả về thông tin của user, bạn cần phải lưu vào datatabase. Lưu như thế nào thì tùy các bạn, ở đây để đơn giản hóa demo mình thêm vào table users 2 trường là providerprovider_id.

Trong app/Http/routes.php

Route::get('auth/facebook', 'Auth[email protected]')->name('auth.facebook');
Route::get('auth/facebook/callback', 'Auth[email protected]');

Trong app/Http/Controllers/Auth/AuthController.php thêm 2 functions sau:

public function redirectToFacebook()
{
    return Socialite::driver('facebook')->redirect();
}

public function handleFacebookCallback()
{
    try {
        $user = Socialite::driver('facebook')->user();
        $create['name'] = $user->name;
        $create['email'] = $user->email;
        $create['facebook_id'] = $user->id;

        $userModel = new User;
        $createdUser = $userModel->addNew($create);
        Auth::loginUsingId($createdUser->id);
        return redirect()->route('home');
    } catch (Exception $e) {
        return redirect('/');
    }
}

Trong Models: app/User.php thêm function sau:

public function addNew($input)
{
    $check = static::where('facebook_id',$input['facebook_id'])->first();

    if(is_null($check)){
        return static::create($input);
    }

    return $check;
    
}

Và cuối cùng trong login page các bạn đặt url là được:

{{ route('auth.facebook') }}

Gặp vấn đề gì vui lòng để lại comment nhé!

Chúc các bạn thành công!

0