Đăng bởi:
Nguyễn Hồng QuânĐăng ngày:
Mar 31, 2021Đăng ở:
Thủ Thuật Thiết KếXin chào các bạn, hôm nay mình sẽ hướng dẫn các bạn cách login với tài khoản Facebook và Gmail nhé.
- Link document hướng dẫn chạy project Laravel
composer require laravel/socialite
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->nullable()->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password')->nullable();
$table->rememberToken();
$table->timestamps();
});
}
Cấu hình file .env
FACEBOOK_CLIENT_ID=13467*****
FACEBOOK_CLIENT_SECRET=*****************
CALLBACK_URL_FACEBOOK=https://domain.com/callback/facebook
GOOGLE_CLIENT_ID=9675********3s1e9q421l2p.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=BWVpYK**********wFwmdSa9p
CALLBACK_URL_GOOGLE=https://domain.com/callback/google
Trong folder config/services:
'facebook' => [
'client_id' => env('FACEBOOK_CLIENT_ID'),
'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
'redirect' => env('CALLBACK_URL_FACEBOOK'),
],
'google' => [
'client_id' => env('GOOGLE_CLIENT_ID'),
'client_secret' => env('GOOGLE_CLIENT_SECRET'),
'redirect' => env('CALLBACK_URL_GOOGLE'),
],
php artisan make:model Models/Users
- trong models ta thêm các code sau:
namespace App\Models;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password','locale','phone'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
Route::get('/social/{provider}', 'Auth\LoginController@redirect')->name('auth.social');
Route::get('/callback/{provider}', 'Auth\LoginController@callback')->name('auth.social.callback');
php artisan make:controller Auth/LoginController
- Bên trong LoginController sẽ viết code để xử lý đăng nhập
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Socialite;
use Auth;
use Exception;
use App\User;
use Illuminate\Http\Request;
use Validator,Redirect,Response,File;
use Session;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function redirect($provider) {
Session::flash('back_url',$_SERVER['HTTP_REFERER']);
return Socialite::driver($provider)->redirect();
}
public function callback($provider) {
$getInfo = Socialite::driver($provider)->stateless()->user();
$link = $_COOKIE['link_file']??'';
// Nếu thông tin facebook trả về không có Email thì thông báo
if(!$getInfo->email) {
return redirect(Session::get('back_url','/'))->with(['flash_level'=>'danger','flash_message'=> 'Tài khoản của bạn không hoạt động.']);
} else {
// Nếu có Email thì check tồn tại trong hệ thống
$findUser = User::where('email', $getInfo->email)->first();
// nếu tồn tại user trong DB thì đăng nhập còn không thì đăng ký
if($findUser != null){
if ($findUser->status == 1) {
Auth::login($findUser, true);
return Redirect::to($link);
} else {
return redirect(Session::get('back_url','/'))->with(['flash_level'=>'danger','flash_message'=> 'Tài khoản của bạn không hoạt động.']);
}
} else {
$created_at = $updated_at = date('Y-m-d H:i:s');
$user = [
'username' => $getInfo->id,
'email' => $getInfo->email,
'name' => $getInfo->name??$getInfo->email,
'password' => bcrypt('*******'),
'status' => 1,
'created_at' => $created_at,
'updated_at' => $updated_at,
];
$user_id = User::insertGetId($user);
Auth::login(User::find($user_id),true);
return Redirect::to($link);
}
}
}
}
FB Login
vào trang welcome.blade.php
như mình chẳng hạn.Ok vậy là chúng ta đã đăng nhập thành công! chúc các bạn thành công.
Bình luận
Để lại bình luận
Email và số điện thoại sẽ không được công khai. Những trường bắt buộc được đánh dấu *