社交名媛不在Laravel中间件中工作,我如何解决此问题?
我正在使用Socialite进行Google身份验证,我有一个中间件用于检查,如果用户通过其Google_id存在于我的本地数据库中,它可以重定向到/home页面,否则它将重定向回Google身份验证页面,在执行此操作时,我面临中间问题,错误是: 客户端错误:社交名媛不在Laravel中间件中工作,我如何解决此问题?,laravel,google-oauth,laravel-socialite,Laravel,Google Oauth,Laravel Socialite,我正在使用Socialite进行Google身份验证,我有一个中间件用于检查,如果用户通过其Google_id存在于我的本地数据库中,它可以重定向到/home页面,否则它将重定向回Google身份验证页面,在执行此操作时,我面临中间问题,错误是: 客户端错误:POSThttps://www.googleapis.com/oauth2/v4/token导致400错误请求响应:{“错误”:“无效请求”,“错误描述”:“缺少必需参数:代码”} 中间件 家庭控制器 谷歌控制器 Gmail帐户模型 你能试
POSThttps://www.googleapis.com/oauth2/v4/token
导致400错误请求
响应:{“错误”:“无效请求”,“错误描述”:“缺少必需参数:代码”}
中间件
家庭控制器
谷歌控制器
Gmail帐户模型
你能试试这个吗
if($finduser) {
auth()->login($finduser), true);
}
else {
return redirect('/logingoogle');
}
其中包括:
使用lightlight\Foundation\Auth\AuthenticatesUsers;
使用社交名流代码>以下是一个工作示例:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Socialite;
use App\User;
class LoginController extends Controller
{
use AuthenticatesUsers;
public function redirectToProvider()
{
return Socialite::driver('google')->redirect();
}
public function handleProviderCallback()
{
try {
$user = Socialite::driver('google')->user();
} catch (\Exception $e) {
return redirect('/login');
}
// check if they're an existing user
$existingUser = User::where('email', $user->email)->first();
if ($existingUser) {
// log them in
auth()->login($existingUser, true);
} else {
// create a new user
$newUser = new User;
$newUser->name = $user->name;
$newUser->email = $user->email;
$newUser->google_id = $user->id;
$newUser->avatar = $user->avatar;
$newUser->avatar_original = $user->avatar_original;
$newUser->lastlogin_at = \Carbon\Carbon::now();
$newUser->save();
auth()->login($newUser, true);
}
session(['user_name' => $user->name]);
session(['user_email' => $user->email]);
session(['user_avatar' => $user->avatar]);
return redirect()->to('/home');
}
}
是的,我尝试了这个,工作正常,但当我在中间件中执行此操作时,会发生错误:(错误已消失,但此语句在循环中运行,我如何解决此返回社交名流::driver('google')->redirect();我只在句柄函数return Socialite::driver('google')->stateless()->redirect()的开头使用现有中间件中的这一行代码);如果删除无状态函数会发生什么情况?如果不为每个文件粘贴完整代码,没有人可以帮助您。现在,当我删除无状态函数时,您也可以看到我的控制器,同样的问题也会发生
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('googleauth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
$user_id=Auth::user()->id;
$user_messages=DB::table('user_message')
->join('messages', 'user_message.message_id', '=', 'messages.id')
->where([
'user_message.user_id' => $user_id,
'user_message.placeholder' => 'inbox'
])
->select('messages.*', 'user_message.message_id', 'user_message.user_id','user_message.is_read')
->orderBy('messages.id', 'DESC')
->paginate(10);
return view('website_pages.home',compact('user_messages'));
}
}
class GoogleController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
public function google_login(){
return view('website_pages.login_google');
}
public function redirectToGoogle()
{
return Socialite::driver('google')->stateless()->redirect();
}
/**
* Create a new controller instance.
*
* @return void
*/
public function handleGoogleCallback()
{
$login_user_id = Auth::user()->id;
try {
$user = Socialite::driver('google')->stateless()->user();
$finduser = GmailAccount::where('google_id', $user->id)->first();
if($finduser){
return redirect('/home');
}
else{
$newUser = DB::table('gmail_accounts')->updateOrInsert(
[
'email' => $user->email,
],
[
'user_id' => $login_user_id,
'email' => $user->email,
'google_id'=> $user->id,
'remember_token'=> $user->token
]
);
if ($newUser){
return redirect('/home');
}
else{
return redirect()->back();
}
Auth::login($newUser, true);
}
} catch (Exception $e) {
dd($e->getMessage());
}
}
}
class GmailAccount extends Model
{
protected $table = 'gmail_accounts';
protected $fillable = [
'email', 'password', 'google_id', 'user_id', 'remember_token'
];
public function user()
{
return $this->belongsTo('App\User');
}
}
if($finduser) {
auth()->login($finduser), true);
}
else {
return redirect('/logingoogle');
}
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Socialite;
use App\User;
class LoginController extends Controller
{
use AuthenticatesUsers;
public function redirectToProvider()
{
return Socialite::driver('google')->redirect();
}
public function handleProviderCallback()
{
try {
$user = Socialite::driver('google')->user();
} catch (\Exception $e) {
return redirect('/login');
}
// check if they're an existing user
$existingUser = User::where('email', $user->email)->first();
if ($existingUser) {
// log them in
auth()->login($existingUser, true);
} else {
// create a new user
$newUser = new User;
$newUser->name = $user->name;
$newUser->email = $user->email;
$newUser->google_id = $user->id;
$newUser->avatar = $user->avatar;
$newUser->avatar_original = $user->avatar_original;
$newUser->lastlogin_at = \Carbon\Carbon::now();
$newUser->save();
auth()->login($newUser, true);
}
session(['user_name' => $user->name]);
session(['user_email' => $user->email]);
session(['user_avatar' => $user->avatar]);
return redirect()->to('/home');
}
}
Route::get('/redirect', 'Auth\LoginController@redirectToProvider');
Route::get('/callback', 'Auth\LoginController@handleProviderCallback');