编辑:Laravel有一个内置的记住我功能。即使用户未选中该复选框,也会让您保持登录状态 2 小时。如果您按下复选框,它会记住您 5 年
我正在拉拉维尔制作一个简单的登录系统。我想在用户单击复选框时添加一个记住我功能。目前我有一个自动功能,可以检查用户是否已成功登录。但是现在我想让用户也必须选中复选框。
这是我现在的代码,无需复选框即可工作
@if(isset(Auth::user()->email))
<script>window.location="/main/succeslogin";</script>
@endif
这是我的表单,我已经在其中添加了复选框
<form method="post" action="{{ url('/main/checklogin') }}">
{{ csrf_field() }}
<div class="form-group">
<label>Enter Email</label>
<input type="email" name="email" class="form-control" />
</div>
<div class="form-group">
<label>Enter Password</label>
<input type="password" name="password" class="form-control" />
</div>
<div class="form-group">
<input type="submit" name="login" class="btn btn-primary" value="Login" />
<input type="checkbox" name="remember"/>
<label>Remember me</label>
</div>
</form>
现在这就是我尝试过的:
@if(isset(Auth::user()->email) AND isset($_POST['remember']))
<script>window.location="/main/succeslogin";</script>
@endif
让我解释一下没有复选框会发生什么。当用户登录并尝试再次访问登录页面时。它自动加载了/succeslogin 页面,因为用户已经登录。现在我只希望当用户选中复选框时发生这种情况。使用您的代码,登录用户仍然可以访问登录页面。
如果用户尚未登录,则无法使用Auth::user()
。Auth::user()
用于获取当前经过身份验证的用户。
只需从请求中获取输入。
@if(request()->input('email') AND request()->input('remember'))
// todo..
@endif
更新(基于评论(
默认的Laravel有RedirectIfAuthenticated
中间件来防止已经通过身份验证的用户到达登录或注册路由/视图,因为他们已经登录。
Auth::routes();
或者对于自定义路由,您可以使用guest
:
Route::get('your-login-page-or-another-route', 'LoginController@method')
->middleware('guest');
如果要在应用程序中提供"记住我"功能,可以将布尔值作为第二个参数传递给attempt
方法,这将使用户无限期地进行身份验证,或者直到他们手动注销。users
表必须包含字符串remember_token
列,该列将用于存储"记住我"标记。
if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) {
// The user is being remembered...
}
也许这段代码你想要什么:
@if(Auth::user()->email && Auth::viaRemember())
<script>window.location="/main/succeslogin";</script>
@endif