- 在控制器中用户登录
public function store(Request $request)
{
$data = $request->validate([
'name' => 'required|min:3',
'email' => 'required|unique:users|email',
'password' => 'required|min:5|confirmed'
]);
// 加密数据以方便后面的登陆验证处理
$data['password'] = bcrypt($data['password']);
// 将表单数据验证后使用create方法登录到数据库中
User::create($data);
// Laravel用户验证登录函数
if(\Auth::attempt(['email' => $request->email, 'password' => $request->password])) {
// 向session中存入一个闪存变量,以便前端返回成功信息
session()->flash('success', '成功注册并自动登录');
} else {
session()->flash('danger', '失败');
}
// 重定向到home页面
return redirect()->route('home');
}
attempt中,密码会自动加密(bcrypt)后再和数据库中的数据进行对比,所以要传入原始数据
- 前端页面(home)中显示成功登录信息
@foreach(['success', 'danger'] as $t)
@if(session()->has($t))
<div class="alert alert-{{$t}}" role="alert">
<strong>{{session()->get($t)}}</strong>
</div>
@endif
@endforeach
- 前端页面(home)中注册登陆按钮变为登出
<form class="form-inline my-2 my-lg-0">
@auth
<a href="{{route('user.logout')}}" class="btn btn-danger my-2 my-sm-0 mr-2">登出</a>
@else
<a href="{{route('user.create')}}" class="btn btn-danger my-2 my-sm-0 mr-2">注册</a>
<a href="{{route('user.login')}}" class="btn btn-success my-2 my-sm-0 mr-2">登陆</a>
@endauth
</form>
- 登陆按钮同理,其中
Route::get('login', 'LoginController@login')->name('login');
Route::post('login', 'LoginController@store')->name('login');
get和post同时命名login时不会发生错误,因为Laravel会自动区别。
return back(); // 返回之前的页面