我是Oauth2和laravel的新手。我正在尝试使用授权代码授权在laravel中实现Authorization Server。我遵循了https://github.com/lucadegasperi/oauth2-server-laravel中提到的所有实现指令。
除了用户需要批准/拒绝每次登录以获取访问代码外,每件事情都运行正常。我希望仅在用户第一次请求授权时才显示授权表单,而不是每次都显示授权表单,类似于在Google中实现Oauth2的方式。
我该怎么办,任何指针?
答案 0 :(得分:2)
我已经在我的一项工作中为您的问题实施了一个解决方案,这里是示例代码,希望有所帮助:
Route::get('/oauth/authorize', array('before' => 'check-authorization-params|auth', function() {
// get the data from the check-authorization-params filter
$params = Session::get('authorize-params');
// get the user id
$params['user_id'] = Auth::user()->id;
if ($params['approval_prompt'] != 'force')
{
$session = DB::table('oauth_sessions')->where('client_id', '=', $params['client_id'])
->where('owner_type', '=', 'user')
->where('owner_id', '=', $params['user_id'])
->first();
if ($session)
{
$code = AuthorizationServer::newAuthorizeRequest('user', $params['user_id'], $params);
Session::forget('authorize-params');
return Redirect::to(AuthorizationServer::makeRedirectWithCode($code, $params));
}
}
// display the authorization form
return View::make('authorization-form', array('params' => $params));
}));
如果approval_prompt
未设置为force
,那么我将检查是否有任何会话属于此用户,并且仅在没有已保存的会话时显示授权表单。
注意:此代码适用于1.0版本的软件包,如果您使用的是其他版本,则可能会有不同的内容。
答案 1 :(得分:0)
这是使用联盟/ oauth2-server 4.1.2对Laravel 5.1和lucadegasperi / oauth2-server-laravel的Hieu Le答案的修改
Route::get('/oauth/authorize', ['as' => 'oauth.authorize.get','middleware' => ['check-authorization-params', 'auth'], function() {
// display a form where the user can authorize the client to access it's data
$authParams = Authorizer::getAuthCodeRequestParams();
$authParams['client_id'] = $authParams['client']->getId();
$formParams = array_except($authParams,'client');
$authParams['user_id'] = Auth::user()->id;
if (array_get($authParams, 'approval_prompt', null) != 'force')
{
$session = DB::table('oauth_sessions')->where('client_id', '=', $authParams['client_id'])
->where('owner_type', '=', 'user')
->where('owner_id', '=', $authParams['user_id'])
->first();
if ($session)
{
$redirectUri = Authorizer::issueAuthCode('user', $authParams['user_id'], $authParams);
return Redirect::to($redirectUri);
}
}
return View::make('oauth.authorization-form', ['params'=>$formParams,'client'=>$authParams['client']]);
}]);