拉拉维尔: @if 身份验证::用户()->电子邮件和复选框被选中?



编辑: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

最新更新