laravel 如果应用已被允许,facebook 不会重定向回来

laravel facebook no redirect back if app allowed already

我用 socialite/facebook 进行了授权。

我的代码--

config/services.php:

'facebook' => [
    'client_id' => 'client_id',
    'client_secret' => 'client_secret',
    'redirect' => 'http://www.example.com/facebook/callback',
],

routes.php:

Route::get('facebook', 'FacebookController@redirectToProvider');
Route::get('facebook/callback', 'FacebookController@handleProviderCallback');

FacebookController.php:

public function redirectToProvider()
{
    return Socialite::with('facebook')->redirect();
}

public function handleProviderCallback(Request $request, User $user)
{
    $users = Socialite::with('facebook')->user();

    // user registration and login
    // if the user is in the database, just login

    return redirect()->back();   
}

一切正常,注册、登录和重定向直到一点。

如果该应用已被允许,它会正常重定向回来。如果您首先使用 Facebook 进行身份验证并允许该应用程序,它不会重定向。

但是,如果重定向是主页:

 return redirect('/');

那也行。

https://developers.facebook.com 中选择您的应用,然后通过控制面板中可用的 App Review 选项,制作您的应用 public 并完全填写批准标准

我的主要观点是,只要在 Facebook 应用程序的开发人员仪表板上进行一些小的更改,您就可以了。

所以我在这里找到了解决方案: http://laravel.io/forum/08-03-2014-redirect-to-the-second-last-page

我解决的代码:

public function redirectToProvider()
{
    // added this
    Session::flash('url',$_SERVER['HTTP_REFERER']);

    return Socialite::with('facebook')->redirect();
}

public function handleProviderCallback(Request $request, User $user)
{
    $users = Socialite::with('facebook')->user();

    // user registration and login
    // if the user is in the database, just login

    // redirect changed from redirect()->back(); to this
    return Redirect::to(Session::get('url'));
}