Oauth2-server-laravel在登录后总是要求批准/拒绝

时间:2015-05-28 06:00:23

标签: laravel laravel-4 oauth-2.0

我是Oauth2和laravel的新手。我正在尝试使用授权代码授权在laravel中实现Authorization Server。我遵循了https://github.com/lucadegasperi/oauth2-server-laravel中提到的所有实现指令。

除了用户需要批准/拒绝每次登录以获取访问代码外,每件事情都运行正常。我希望仅在用户第一次请求授权时才显示授权表单,而不是每次都显示授权表单,类似于在Google中实现Oauth2的方式。

我该怎么办,任何指针?

2 个答案:

答案 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']]);
}]);