19/08/2018, 18:03

Tích hợp đăng nhập facebook vào react app trên Laravel

Cùng viết chức năng đăng nhập facebook trên React app sử dụng Facebook javascript sdk. Client sẽ sử dùng sdk lấy access token và gửi lên server. Server sẽ dùng access token đó để lấy thông tin của user và xử lý đăng nhập. Cùng bắt đầu nào. Cài đặt laravel composer create-project --prefer-dist ...

Cùng viết chức năng đăng nhập facebook trên React app sử dụng Facebook javascript sdk. Client sẽ sử dùng sdk lấy access token và gửi lên server. Server sẽ dùng access token đó để lấy thông tin của user và xử lý đăng nhập. Cùng bắt đầu nào.

Cài đặt laravel

composer create-project --prefer-dist laravel/laravel fblogin

phía server sẽ dùng laravel/socialite để xử lý access token client gửi lên

composer require laravel/socialite

Tạo ứng dụng facebook

Vào https://developers.facebook.com/ và tạo 1 ứng dụng mới Sau đó thì cài đặt thêm tên miền cho ứng dụng Kế tiếp là thêm đoạn mã mà facebook cung cấp vào html file. Thay {your-app-id} bằng id của ứng dụng và {api-version} là v3.1

<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : '{your-app-id}',
      cookie     : true,
      xfbml      : true,
      version    : '{api-version}'
    });
      
    FB.AppEvents.logPageView();   
      
  };

  (function(d, s, id){
     var js, fjs = d.getElementsByTagName(s)[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement(s); js.id = id;
     js.src = "https://connect.facebook.net/en_US/sdk.js";
     fjs.parentNode.insertBefore(js, fjs);
   }(document, 'script', 'facebook-jssdk'));
</script>

Sau đó vào file view và thêm nút login facebook.

onClick = (event) => {
    event.preventDefault()
    window.FB.getLoginStatus((response) => {
      console.log(response.status)
      if (response.status !== 'connected') {
        return window.FB.login((res) => {
          if (res.status === 'not_authorized') {
            return
          }
          const accessToken = res.authResponse.accessToken
          this.fbLogin(accessToken)
        }, {scope: 'email'})
      }
      const accessToken = response.authResponse.accessToken
      this.fbLogin(accessToken)
    })
}

Xử lý gửi access token lên server

fbLogin = (token) => {
    axios.post('/login-fb', {
      token
    }).then(({data}) => {
      console.log(data)
      alert('Đăng nhập thành công')
    }).catch(error => {
      console.log(error)
    })
}

Xử lý bên server

như code ở trên thì sẽ gửi token kên route /login-fb. Giờ sẽ tạo route và controller

Sửa file config

Để sử dụng laravel socialite cần phải config client id và secret. Mở file config/services.php và thêm client_id, client_secret, redirect vào

'facebook' => [
    'client_id' => env('FACEBOOK_CLIENT_ID'),
    'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
    'redirect' => env('FACEBOOK_REDIRECT_URL')
],

Xử lý ở Controller

Bây giờ thì sẽ dùng token và lấy thông tin user ở Controller

public function fbLogin(Request $request)
    {
        //Validate
        $user = Socialite::driver('facebook')->userFromToken($request->get('token'));
        //kiểm tra user trong database, tạo jwt token, các thứ, các thứ...
        return response()->json($user);
    }

Kết Quả

Đây là thành quả sau khi thành công

0