这是我第一次尝试使用laravel包并遇到一个问题,其中Auth :: attempt($ credentials)在我的登录控制器中工作,但是在重定向到受保护的路由或控制器时,用户不再经过身份验证。下面是我的登录控制器方法,其中重定向到仪表板已注释掉。
public function attempt(Request $request){
$email = strtolower(strip_tags(htmlspecialchars($request->input('email'))));
$password = strip_tags(htmlspecialchars($request->input('password')));
if (Auth::attempt(array('email' => $email, 'password' => $password)))
{
// Redirect to dashboard route
//return redirect()->intended('/admin');
if(Auth::check())
print_r(Auth::user());
}
}
对有效凭据的响应打印出正确的用户记录,Auth :: check返回true。但是,当重定向到管理控制器时,用户未经过身份验证。下面是应该输出经过身份验证的用户的管理员控制器方法,但只返回"未记录"。
public function index()
{
if(Auth::check()) print_r(Auth::user());
else echo "not logged";
}
两个控制器都使用Auth;,它们的命名空间与vendor / package / pathToDir一致,db设置正确,并且已设置加密密钥。关于出了什么问题的任何想法?感谢
答案 0 :(得分:16)
原来问题在于新的Web中间件,将我需要会话数据的所有路由移动到路由组中,一切正常。
Route::group(['middleware' => ['web']], function () {
Route::get("/login", ['uses'=>'SiteLogin@index']);
Route::post("/login", ['uses'=>'SiteLogin@attempt']);
Route::get("/logout", ['uses'=>'SiteLogin@logout']);
Route::group(['prefix' => 'admin', 'middleware' => 'auth'], function () {
Route::get('/', ['uses'=>'Admin@index']);
});
});
答案 1 :(得分:0)
方法尝试的默认行为是不让用户记录。
您应将其更改为:
if (Auth::attempt(array('email' => $email, 'password' => $password), false, true))
这样您就可以将remember
设置为false,将login
设置为true。
点击此处查看更多相关信息:https://laravel.com/docs/5.2/authentication