在 laravel 中使用社交名流登录 Facebook
Posted
技术标签:
【中文标题】在 laravel 中使用社交名流登录 Facebook【英文标题】:Facebook login using socialite in laravel 【发布时间】:2019-06-21 04:33:01 【问题描述】:在 laravel 中使用社交精简版遵循 facebook Oauth 的过程
https://itsolutionstuff.com/post/laravel-56-login-with-facebook-with-socialiteexample.html
但是在我设置之后,我遇到了像 ERR_TOO_MANY_REDIRECTS 这样的问题。
这是它重定向我的链接:
https://www.facebook.com/v3.0/dialog/oauth?client_id=xxxxxxxxxxxx&redirect_uri=http%3A%2F%2Flocalhost%2Ffesbok%2Fpublic%2Fauth%2Ffacebook%2Fcallback&scope=email&response_type=code&state=0R4djYkaHGFEHcXF8CDZQEC52TGvzA82jr77PPp5#=
可能的问题是什么?我相信跟随一切。请让我知道我错过了什么。
【问题讨论】:
在第 5 步中,每当处理回调时出现问题,它会再次重定向到auth/facebook
,尝试再次触发整个身份验证过程。删除该重定向,然后检查此时异常实际上要说什么-
@04FS 感谢您的评论。它可以帮助我调试问题。
【参考方案1】:
这是我在 PROD 中用于辅助项目的代码。到目前为止工作没有任何问题。
我希望它可以帮助您完成这个棘手的事情 :D,因为您可以看到它比看起来更容易。
错误可能是您设置路由以处理身份验证和回调的方式,对我来说,您似乎对两者都有相同的路由,并且当 Facebook 批准并将用户发回时,您的网站再次重定向到 OAuth 端点等等。
<?php
namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Response;
use Laravel\Socialite\Facades\Socialite;
class LoginController extends Controller
/**
* Redirect the user to the GitHub authentication page.
*
* @param $provider
* @return Response
*/
public function redirectToProvider($provider)
return Socialite::driver($provider)->redirect();
/**
* Obtain the user information from GitHub.
*
* @param $provider
* @return Response
*/
public function handleProviderCallback($provider)
$user = Socialite::driver($provider)->user();
$authUser = $this->findOrCreateUser($user, $provider);
auth()->login($authUser, true);
return redirect('/home');
/**
* Finds or creates an user.
*
* @param $user
* @param $provider
* @return mixed
*/
public function findOrCreateUser($user, $provider)
$authUser = User::where('provider_id', $user->id)->first();
if ($authUser)
return $authUser;
return User::create([
'name' => $user->name,
'email' => $user->email,
'provider' => $provider,
'provider_id' => $user->id,
]);
这就是我们设置服务的方式(您也可以使用路由功能来代替 env )。
<?php
return [
/*
|--------------------------------------------------------------------------
| Third Party Services
|--------------------------------------------------------------------------
|
| This file is for storing the credentials for third party services such
| as Stripe, Mailgun, SparkPost and others. This file provides a sane
| default location for this type of information, allowing packages
| to have a conventional place to find your various credentials.
|
*/
'twitter' => [
'client_id' => env('TWITTER_CLIENT_ID', ''),
'client_secret' => env('TWITTER_CLIENT_SECRET', ''),
'redirect' => env('APP_URL', '').'/auth/twitter/callback',
],
'facebook' => [
'client_id' => env('FACEBOOK_CLIENT_ID', ''),
'client_secret' => env('FACEBOOK_CLIENT_SECRET', ''),
'redirect' => env('APP_URL', '').'/auth/facebook/callback',
],
'google' => [
'client_id' => env('GOOGLE_CLIENT_ID', ''),
'client_secret' => env('GOOGLE_CLIENT_SECRET', ''),
'redirect' => env('APP_URL', '').'/auth/google/callback',
],
];
//Routes for socialite
Route::get('auth/provider', 'LoginController@redirectToProvider');
Route::get('auth/provider/callback', 'LoginController@handleProviderCallback');
【讨论】:
非常感谢!这对我有很大帮助 如果它真的有帮助,如果你能把它标记为解决方案就好了:D,总是乐于提供帮助。以上是关于在 laravel 中使用社交名流登录 Facebook的主要内容,如果未能解决你的问题,请参考以下文章