最近我从Laravel Framework开始,并且以老式的方式实现登录功能
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
功能中,检查是否存在用户会话(如果不是重定向到登录页面),否则根据用户角色加载视图。
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
}
我如何使用中间Wares重写上述代码,我找到了很多示例,但无法获得适当的解决方案
首先,我强烈建议您使用laravel登录。当前,当您将用户放入会话中时,您没有记录他。laravel使用 auth 幕墙来管理用户登录,注销,后卫等。
您可以使用Auth::attempt(['email' => $email, 'password' => $password])
自动检查正确的凭据并登录(此方法将在成功时返回True)。之后,您可以使用Auth::check()
查看用户是否已记录,或者 auth 中部软件来保护路由和Contorllers,因此您不必检查用户是否在其内部记录。