记住我
本章节最后要实现的一个功能是『记住我』功能,在 Laravel 的默认配置中,如果用户登录后没有使用『记住我』功能,则登录状态默认只会被记住两个小时。如果使用了『记住我』功能,则登录状态会被延长到五年。我们可以通过使用 Laravel 提供的『记住我』功能来保存一个记忆令牌,用于长时间记录用户登录的状态。Laravel 默认为用户生成的迁移文件中已包含 remember_token
字段,该字段将用于保存『记住我』令牌。
首先让我们修改登录视图,加上『记住我』复选框。
resources/views/sessions/create.blade.php
@extends('layouts.default')
@section('title', '登录')
@section('content')
<div class="offset-md-2 col-md-8">
<div class="card ">
<div class="card-header">
<h5>登录</h5>
</div>
<div class="card-body">
@include('shared._errors')
<form method="POST" action="{{ route('login') }}">
{{ csrf_field() }}
<div class="form-group">
<label for="email">邮箱:</label>
<input type="text" name="email" class="form-control" value="{{ old('email') }}">
</div>
<div class="form-group">
<label for="password">密码:</label>
<input type="password" name="password" class="form-control" value="{{ old('password') }}">
</div>
<div class="form-group">
<div class="form-check">
<input type="checkbox" class="form-check-input" name="remember" id="exampleCheck1">
<label class="form-check-label" for="exampleCheck1">记住我</label>
</div>
</div>
<button type="submit" class="btn btn-primary">登录</button>
</form>
<hr>
<p>还没账号?<a href="{{ route('signup') }}">现在注册!</a></p>
</div>
</div>
</div>
@stop
前面我们介绍过的 Auth::attempt()
方法可接收两个参数,第一个参数为需要进行用户身份认证的数组,第二个参数为是否为用户开启『记住我』功能的布尔值。接下来让我们修改会话控制器中的 store
方法,为 Auth::attempt()
添加『记住我』参数。
app/Http/Controllers/SessionsController.php
<?php
namespace App\Http\Controllers;
.
.
.
class SessionsController extends Controller
{
.
.
.
public function store(Request $request)
{
$credentials = $this->validate($request, [
'email' => 'required|email|max:255',
'password' => 'required'
]);
if (Auth::attempt($credentials, $request->has('remember'))) {
session()->flash('success', '欢迎回来!');
return redirect()->route('users.show', [Auth::user()]);
} else {
session()->flash('danger', '很抱歉,您的邮箱和密码不匹配');
return redirect()->back()->withInput();
}
}
.
.
.
}
至此,『记住我』功能已被成功添加,使用 Laravel 开发一切就是如此简单: