最近我开始使用 laravel 框架,并以老式的方式实现登录功能
Route::post('login',['as'=>'validatelogin','uses'=>'HomeController@login']);
Route::get('home/{page?}/{id?}','HomeController@home');
在 HomeController 中
public function login(Request $request)
{
$matches=['email'=>$request->email];
$users =User::where($matches)->first();
if($users == FALSE)
{
$request->session()->flash(
'errors',
'Invalid Email');
return redirect('/');
}
else if($users->account_status==0)
{
$request->session()->flash(
'errors',
'Account is blocked please contact admin');
return redirect('/');
}
else if (!Hash::check($request->password,$users->user_password))
{
$request->session()->flash('errors', 'Invalid Password');
return redirect('/');
}
else
{
//login success set the session values
$request->session()->put('user',$users);
//redirect to home
return redirect('home');
}
}
在home
函数中,如果没有重定向到登录页面,则检查用户 session 是否存在,否则根据用户角色加载 View 。
public function home(Request $request,$page='admin-home',$id=null)
{
if(!$request->session()->has('user'))
{
$request->session()->flash('errors', 'Session is expired');
return redirect('/');
}
//load the views based on roles
}
如何使用中间件重写上面的代码,我找到了很多例子,但无法得到正确的解决方案
最佳答案
首先我强烈建议您使用 Laravel 登录。目前,当您将用户放入 session 中时,您并没有让他登录。Laravel 使用 Auth 外观来管理用户登录、注销、防护等。
您可以使用 Auth::attempt(['email' => $email, 'password' => $password])
自动检查凭据和登录是否正确(此方法将返回 true关于成功)。之后,您可以使用 Auth::check() 来查看用户是否已登录,或者使用 auth 中间件来保护路由和 Controller ,这样您就不必检查用户是否已登录用户已登录其中。
关于php - 拉拉维尔 :login using custom middleware,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37826857/