如何在Laravel 8中实现Remember me



我有一个登录表单和一个记住我复选框。如果用户在上次登录时选中了"记住我"复选框,我希望用户名和密码能够自动填写,但目前不起作用。我使用的是在Laravel中构建的LoginController。

登录控制器:

<?php

namespace AppHttpControllersAuth;
use AppHttpControllersController;
use AppProvidersRouteServiceProvider;
use IlluminateFoundationAuthAuthenticatesUsers;
use IlluminateHttpRequest;
use IlluminateValidationValidationException;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::DASHBOARD;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
/**
* Check either username or email.
* @return string
*/
public function username()
{
$identity  = request()->get('identity');
$fieldName = filter_var($identity, FILTER_VALIDATE_EMAIL) ? 'email' : 'name';
request()->merge([$fieldName => $identity]);
return $fieldName;
}
/**
* Validate the user login.
* @param Request $request
*/
protected function validateLogin(Request $request)
{
$this->validate(
$request,
[
'identity' => 'required|string',
'password' => 'required|string',
],
[
'identity.required' => 'Username or email is required',
'password.required' => 'Password is required',
]
);
}
/**
* @param Request $request
* @throws ValidationException
*/
protected function sendFailedLoginResponse(Request $request)
{
$request->session()->put('login_error', trans('auth.failed'));
throw ValidationException::withMessages(
[
'error' => [trans('auth.failed')],
]
);
}
}

login.blade.php:

@extends('layouts.app')
@section('content')
<div class="topMargin container">
<br><br>
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header" text-align="center">{{ __('Login') }}</div>
<div class="card-body">
<form method="POST" action="{{ route('login') }}">
@csrf
<div class="form-group row">
{{-- <label for="email" class="col-sm-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label> --}}
<div class="col-md-12">
<input id="identity" type="identity" class="form-control{{ $errors->has('identity') ? ' is-invalid' : '' }}" name="identity" value="{{ old('identity') }}" placeholder="{{ __('Email or Username') }}" required autofocus>
@if ($errors->has('identity'))
<span class="invalid-feedback">
<strong>{{ $errors->first('identity') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group row">
{{-- <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label> --}}
<div class="col-md-12">
<input id="password" type="password" class="form-control{{ $errors->has('password') ? ' is-invalid' : '' }}" name="password" placeholder="Password" required>
@if ($errors->has('password'))
<span class="invalid-feedback">
<strong>{{ $errors->first('password') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group">
<div style="text-align:center">
<div class="checkbox">
<label>
<input type="checkbox" name="remember" {{ old('remember') ? 'checked' : '' }}> {{ __('Remember Me') }}
</label>
</div>
</div>
</div>
<div class="form-group">
<div style="text-align:center">
<button type="submit" class="btn btn-primary">
{{ __('Login') }}
</button>
</div>
<br>
<div style="text-align:center">
<a class="btn btn-link" href="{{ route('password.request') }}">
{{ __('Forgot Your Password?') }}
</a>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection

如有任何帮助,我们将不胜感激!

看起来您使用的是Laravel提供的默认身份验证,这意味着您不需要在Http/Controllers/Auth/LoginController中执行任何操作来记住如果您在views/auth/login.blade.php表单中有默认表单输入名称值,则用户,这看起来像您所做的!

您唯一需要确保的是在users表中存储一个remember_token字段。

请参阅:https://laravel.com/docs/8.x/authentication#remembering-用户

public function webLoginPost(Request $request)
{
$this->validate($request, [
'email' => 'required|email',
'password' => 'required',
]);

$remember_me = $request->has('remember_me') ? true : false; 

if (auth()->attempt(['email' => $request->input('email'), 'password' => $request->input('password')], $remember_me))
{
$user = auth()->user();
dd($user);
}else{
return back()->with('error','your username and password are wrong.');
}
}

最新更新