我尝试使用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
变量。我怎么把它传递给那里?
答案 0 :(得分:4)
如果要传递一些数据,则需要使用状态参数。
您的提供商的示例
$provider = 'google';
return Socialite::with(['state' => $provider])->redirect();
您的回调函数:
$provider = request()->input('state');
$driver = Socialite::driver($provider)->stateless();
答案 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