在laitevel

时间:2016-07-15 08:47:30

标签: php laravel

我尝试使用Socialite包进行laravel,我想知道如何将其他参数传递给回调网址。似乎OAuth允许额外的参数,但我还没有找到任何关于如何通过它们的laravel解决方案。目前我的方法看起来像这样

    public function login($provider)
    {
        return Socialite::with($provider)->redirect();
    }


   public function callback(SocialAccountService $service, $provider)
    {
        $driver   = Socialite::driver($provider);
        $user = $service->createOrGetUser($driver, $provider);
        $this->auth()->login($user, true);
        return redirect()->intended('/');

    }

假设我想在回调方法中获取$user_role变量。我怎么把它传递给那里?

4 个答案:

答案 0 :(得分:4)

如果要传递一些数据,则需要使用状态参数。

您的提供商的示例

$provider = 'google';
return Socialite::with(['state' => $provider])->redirect();

您的回调函数:

$provider = request()->input('state');
$driver = Socialite::driver($provider)->stateless();

gist example

答案 1 :(得分:2)

由于某种原因,Optional Parameters对我不起作用,因此我最终使用会话将变量从 redirect 方法传递给 callback 方法。这不是最好的方法,但是可以解决问题。

简化示例

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\User;
use Socialite;

class FacebookController extends Controller {

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function redirect($my_variable)
    {
        session(['my_variable' => $my_variable]);

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


    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function callback(Request $request)
    {
        try {

            $facebookAccount = Socialite::driver('facebook')->stateless()->user();

            $my_variable = session('my_variable');

            // your logic...

            return redirect()->route('route.name');


        } catch (Exception $e) {


            return redirect()->route('auth.facebook');
        }
    }
}

答案 2 :(得分:0)

您可以像这样实时更新回调URL:

public function redirectToProvider($providerName)
{
    config([
        "services.$providerName.redirect" => config("services.$providerName.redirect").'?queryString=test'
    ]);

    try {
        return Socialite::driver($providerName)->redirect();

    } catch (\Exception $e) {

        return redirect('login');

    }

}

它在回调URL函数中返回 queryString (request-> all())。

答案 3 :(得分:0)

即时在config中更改redirect_uri将重定向回预期的域,但在尝试使用户遵循以下条件时不会返回用户

[options.entry_points]
console_scripts =
    package = package.app:main