我想将oauth2 server集成到我的laravel 4.1项目中。密码流进行得很顺利,但在编写授权代码流时,我遇到了一些奇怪的会话问题。
生成请求会导致此功能在已登录用户中进行过滤
Route::get('security/authorize', array('before' => 'check-authorization-params|auth', function()
{
[...]
}));
将访客重定向到表单以登录
Route::get('security/login', array('before' => 'guest' ,function()
{
return View::make('users.login');
}));
导致这条路线用户应该登录并重定向到他打算做的请求:
public function login()
{
$creds = array(
'email' => Input::get('email'),
'password'=>Input::get('password')
);
if(Auth::attempt($creds, true))
{
return Redirect::intended('/');
}
return Redirect::to('security/login');
}
问题是,尽管有一个正的Auth :: attempt(),我仍然被auth
过滤器重定向。
我做了一些简短的测试,通过设置和读取从未到达下一个请求的会话数据来检查什么是错误的,所以我想出了我必须要处理我的会话。
这是我的会话配置文件
<?php
return array(
'driver' => 'database',
'lifetime' => 120,
'expire_on_close' => false,
'files' => storage_path().'/sessions',
'connection' => 'mysql',
'table' => 'sessions',
'lottery' => array(2, 100),
'cookie' => 'laravel_session',
'path' => '/',
'domain' => null,
);
以下是我仔细检查过的一些事情:
答案 0 :(得分:1)
事实证明,我没有在我的用户模型中正确设置auth标识符。 从这个改变它
public function getAuthIdentifier()
{
return $this->email;
}
到这个
public function getAuthIdentifier()
{
return $this->id;
}
修复了一切。