Laravel Auth::attempt() 总是将我重定向到登录页面
Laravel Auth::attempt() redirect me always to login page
我正在尝试使用 Laravel Auth::attempt()
功能,但它总是将我重定向到登录页面,即使我使用 valide
用户名和 password
也是如此。
这是我的路线:
Route::get('/login', 'PublicController@loginPage');
Route::post('/login', 'PublicController@loginAction');
Route::get('/users/members', array('before' => 'auth', function()
{
return View::make('users.members');
}));
这是我的 loginAction
功能:
public function loginAction() {
$rules = array( 'username' => 'required',
'password' => 'required'
);
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails()) {
$messages = $validator->messages();
return Redirect::to('login')
->withErrors($validator)
->withInput(Input::except('password'));
}
else {
$user = array(
'username' => Input::get('username'),
'password' => Input::get('password')
);
$auth = Auth::attempt($user);
if ($auth) {
dd(Auth::check()); // this return always **True**
return Redirect::to('users/members');
} else {
return Redirect::to('login')
->withErrors(['Login Failed please try again']);}
}
}
当我使用错误的 username
和 password
时,它会显示错误消息 Login Failed please try again
,而当我使用有效数据时,它会显示 rederict me to the Login page without showing any error
更新
路由过滤器:
Route::filter('auth', function()
{
if (Auth::guest())
{
if (Request::ajax())
{
return Response::make('Unauthorized', 401);
}
else
{
return Redirect::guest('login');
}
}
});
更新 2:
这是我的个人资料页面(我希望在登录后被重定向到的地方):
Route::get('/users/members', function()
{
dd(Auth::check()); This always return **false**
});
所以问题,我认为是用户身份验证在登录后没有保存。
能否将您的 filters.php
的相关部分发送给我们
Route::filter('auth', function()
{
// Your filter here
}
我相信其中有些东西会阻止正确的重定向。
为了进行测试,您可以从路线中删除过滤器。
Route::get('/users/members', function() ...
经过深入挖掘,我发现问题是我对主键使用了不同的名称,user_id 而不是 id,在我的数据库中。所以简单地说,我已经将这一行添加到我的用户模型
class User extends Eloquent {
protected $primaryKey = 'admin_id';
....}
注意 如果您使用不同的主键名称而不是 id 然后不要忘记添加这个属性
protected $primaryKey = 'PrimaryKeyName';
这将解决音调问题
我正在尝试使用 Laravel Auth::attempt()
功能,但它总是将我重定向到登录页面,即使我使用 valide
用户名和 password
也是如此。
这是我的路线:
Route::get('/login', 'PublicController@loginPage');
Route::post('/login', 'PublicController@loginAction');
Route::get('/users/members', array('before' => 'auth', function()
{
return View::make('users.members');
}));
这是我的 loginAction
功能:
public function loginAction() {
$rules = array( 'username' => 'required',
'password' => 'required'
);
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails()) {
$messages = $validator->messages();
return Redirect::to('login')
->withErrors($validator)
->withInput(Input::except('password'));
}
else {
$user = array(
'username' => Input::get('username'),
'password' => Input::get('password')
);
$auth = Auth::attempt($user);
if ($auth) {
dd(Auth::check()); // this return always **True**
return Redirect::to('users/members');
} else {
return Redirect::to('login')
->withErrors(['Login Failed please try again']);}
}
}
当我使用错误的 username
和 password
时,它会显示错误消息 Login Failed please try again
,而当我使用有效数据时,它会显示 rederict me to the Login page without showing any error
更新 路由过滤器:
Route::filter('auth', function()
{
if (Auth::guest())
{
if (Request::ajax())
{
return Response::make('Unauthorized', 401);
}
else
{
return Redirect::guest('login');
}
}
});
更新 2: 这是我的个人资料页面(我希望在登录后被重定向到的地方):
Route::get('/users/members', function()
{
dd(Auth::check()); This always return **false**
});
所以问题,我认为是用户身份验证在登录后没有保存。
能否将您的 filters.php
的相关部分发送给我们Route::filter('auth', function()
{
// Your filter here
}
我相信其中有些东西会阻止正确的重定向。
为了进行测试,您可以从路线中删除过滤器。
Route::get('/users/members', function() ...
经过深入挖掘,我发现问题是我对主键使用了不同的名称,user_id 而不是 id,在我的数据库中。所以简单地说,我已经将这一行添加到我的用户模型
class User extends Eloquent {
protected $primaryKey = 'admin_id';
....}
注意 如果您使用不同的主键名称而不是 id 然后不要忘记添加这个属性
protected $primaryKey = 'PrimaryKeyName';
这将解决音调问题