Chào mọi người, hôm nay mình sẽ chia sẻ về cách làm chức năng login bằng tài khoản google trên laravel mà mình học được trong thời gian làm việc.
B1: Tạo Project và Credentials trên Google Cloud Console để có thể sử dụng các apis và services của google
Đầu tiên bạn phải có tài khoản google, sau khi đăng nhập hãy truy cập vào https://console.cloud.google.com
![](https://forum.caeruxlab.com/assets/files/2023-11-22/1700645900-594521-image.png)
Sau đó bạn hãy vào APIs & Services, hãy nhìn lên góc bên tay trái màn hình bên cạnh chữ Google Clound bạn sẽ thấy mục project bấm vào sẽ ra mục để chọn các project bạn đã tạo hoặc tạo 1 project mới, ở đây mình sẽ chọn new project để tạo project mới
![](https://forum.caeruxlab.com/assets/files/2023-11-22/1700646005-389288-image.png)
Khi tạo project bạn hãy nhập các thông tin mà google yêu cầu sau khi tạo xong hãy select project bạn vừa tạo và chọn Oauth consent screen để nhập các thông tin xác thực app bạn muốn sử dụng api login của google
![](https://forum.caeruxlab.com/assets/files/2023-11-22/1700646338-71724-image.png)
![](https://forum.caeruxlab.com/assets/files/2023-11-22/1700646467-218862-image.png)
Tùy vào mục đích sử dụng bạn có thể chọn Internal hoặc External, ở đây mình sẽ chọn External sau đó bạn hãy điền các thông tin mà google cần để xác thực app của bạn, tại đây mình test trên local nên mình sử dụng domain localhost, nếu bạn muốn setup cho dev hoặc prod thì hãy điền domain tương ứng
![](https://forum.caeruxlab.com/assets/files/2023-11-22/1700646713-645447-image.png)
![](https://forum.caeruxlab.com/assets/files/2023-11-22/1700646722-557390-image.png)
Sau khi đã điền thông tin xác thực bạn hãy quay trở lại mục Credentials và tạo api key
![](https://forum.caeruxlab.com/assets/files/2023-11-22/1700646981-370505-image.png)
Sau khi tạo xong Credentials sẽ có dạng như sau, trong đó client id và secret là 2 thông tin quan trọng để xác thực và ủy quyền khi app của bạn sử dụng dịch vụ của google, Authorised redirect URIs sẽ là url bạn nhận thông tin về tài khoản google sau khi đăng nhập trên app
![](https://forum.caeruxlab.com/assets/files/2023-11-22/1700647387-680232-image.png)
B2: Tích hợp chức năng đăng nhập google trên Laravel bằng cách sử dụng thư viện Socialite
- Giới thiệu về Laravel Socialite:
Laravel Socialite cung cấp một giao diện linh hoạt và trôi chảy cho việc xác thực OAuth với Facebook, Twitter, Google, LinkedIn, GitHub, GitLab và Bitbucket. Nó xử lý gần như tất cả mã xác thực xã hội mà bạn đang lo ngại phải viết.
Bạn có thể tìm hiểu thêm về package này trên github hoặc docs laravel
https://github.com/laravel/socialite
https://laravel.com/docs/8.x/socialite
- Cài đặt và config
Đầu tiên để cài đặt package bạn hãy chạy câu lệnh:
composer require laravel/socialite
Sau đó trong file services tại thử mục config của laravel hãy config credentials như sau
![](https://forum.caeruxlab.com/assets/files/2023-11-22/1700648074-802191-image.png)
Trong file env hãy nhập client id, client secret và url callback tương ứng mà bạn đã tạo trong credentials
![](https://forum.caeruxlab.com/assets/files/2023-11-22/1700648150-464578-image.png)
Tới đây thì việc config socialite trong laravel đã xong giờ bạn cần viết xử lý logic sau khi đăng nhập google.
B3: Xử lý logic
Trong file routes của laravel bạn hãy tạo 2 route như sau
![](https://forum.caeruxlab.com/assets/files/2023-11-22/1700648276-471179-image.png)
Trong đó route có name là social.redirect dùng để chuyển hướng bạn tới trang login của google và social.callback để nhận thông tin về tài khoản google của bạn sau khi đăng nhập.
Ngoài file view bạn sẽ để href là route social.redirect như sau
![](https://forum.caeruxlab.com/assets/files/2023-11-22/1700648404-342726-image.png)
Trong Controller hãy viết xử lý cho 2 route trên như sau
![](https://forum.caeruxlab.com/assets/files/2023-11-22/1700648444-30648-image.png)
Ở trong method callback() nếu bạn dd(Socialite::driver($social)->stateless()->user())
bạn sẽ nhận được data về tài khoản google sau khi đăng nhập có dạng như sau
![](https://forum.caeruxlab.com/assets/files/2023-11-22/1700648555-489010-image.png)
Khi chúng ta đã có được data user sau khi đăng nhập việc còn lại chỉ là xử lý lưu các thông tin này vào database và sử dụng cho các lần login tiếp theo, hãy viết 1 method createOrFindUser() trong repository như này
![](https://forum.caeruxlab.com/assets/files/2023-11-22/1700648646-758115-image.png)
Vậy là việc tạo 1 chức năng login bằng google trên laravel đã hoàn thành, với xử lý logic trên khi login bằng google lần đầu thì tài khoản sẽ được tạo trong database của hệ thống, và khi đăng nhập lần thứ 2 thì chỉ cần tìm tới tài khoản đã tạo để đăng nhập
Mong rằng bài viết có thể giúp ích cho mọi người, vì lần đầu viết bài chia sẽ kiến thức nên diễn đạt của mình có thể chưa tốt. Cảm ơn vì mọi người đã đọc bài viết , chúc mọi người một ngày vui vẻ.