laravel 實(shí)現(xiàn)登錄注冊(cè)

laravel 是一種流行的 php 框架,它提供了一個(gè)強(qiáng)大的開(kāi)發(fā)環(huán)境,可以讓您更容易地構(gòu)建 web 應(yīng)用程序。其中一個(gè)重要的特性是 laravel 自帶的身份驗(yàn)證系統(tǒng),可以讓您快速實(shí)現(xiàn)用戶(hù)認(rèn)證,包括登錄和注冊(cè)。在本文中,我們將演示如何使用 laravel 實(shí)現(xiàn)登錄注冊(cè)

部署環(huán)境
在開(kāi)始實(shí)現(xiàn)身份驗(yàn)證之前,我們需要確保 Laravel 環(huán)境已經(jīng)配置好并且數(shù)據(jù)庫(kù)連接已經(jīng)配置。如果您還沒(méi)有安裝 Laravel,可以參考官方文檔中的安裝指南。在 Laravel 應(yīng)用程序中,我們使用 Artisan 命令行工具創(chuàng)建必要的文件和目錄結(jié)構(gòu)。在命令行中,我們可以使用以下命令創(chuàng)建新的 Laravel 應(yīng)用程序:

composer create-project –prefer-dist laravel/laravel blog

創(chuàng)建之后,導(dǎo)航到應(yīng)用程序的根目錄,運(yùn)行以下命令生成應(yīng)用程序密鑰:

php artisan key:generate

注冊(cè)路由
在 Laravel 中,路由是連接 URI 和對(duì)應(yīng)控制器方法的橋梁。要注冊(cè)我們的身份驗(yàn)證路由,我們需要更新 routes/web.php 文件。在這個(gè)文件中,我們定義了應(yīng)用程序的路由,其中包括登錄和注冊(cè)路由。

首先,我們需要定義發(fā)送 POST 請(qǐng)求到 /register 的路由,并將其綁定到 RegisterController 的 register() 方法。這將呈現(xiàn)一個(gè)注冊(cè)表單,用戶(hù)可以填寫(xiě)其用戶(hù)名和密碼。

Route::post(‘/register’, ‘AuthRegisterController@register’)->name(‘register’);

接下來(lái),我們需要定義發(fā)送 POST 請(qǐng)求到 /login 的路由,并將其綁定到 LoginController 的login() 方法。這將呈現(xiàn)一個(gè)登錄表單,用戶(hù)可以填寫(xiě)登錄名和密碼。如果用戶(hù)沒(méi)有有效的憑據(jù)進(jìn)行驗(yàn)證,則應(yīng)用程序會(huì)重定向到登錄表單。

Route::post(‘/login’, ‘AuthLoginController@login’)->name(‘login’);

最后,我們需要定義所有受保護(hù)的路由。在 Laravel 中,我們可以使用 auth 中間件來(lái)確保用戶(hù)已經(jīng)通過(guò)身份驗(yàn)證。這個(gè)中間件將自動(dòng)重定向未經(jīng)驗(yàn)證的用戶(hù)到 /login 路由。

Route::middleware([‘auth’])->group(function () {

// your protected routes go here

});

處理控制器
我們已經(jīng)定義了必要的路由,現(xiàn)在需要在控制器中處理它們。在 Laravel 中,控制器是處理特定 HTTP 請(qǐng)求的類(lèi),控制器中的方法返回 HTTP 響應(yīng)。在應(yīng)用程序中,我們需要?jiǎng)?chuàng)建兩個(gè)控制器用于處理注冊(cè)和登錄請(qǐng)求。

在 app/Http/Controllers/Auth 目錄下,創(chuàng)建 LoginController.php 和 RegisterController.php 兩個(gè)文件,這兩個(gè)文件是 Laravel 自帶的控制器類(lèi)。在這些控制器中,我們需要覆蓋 Laravel 的默認(rèn)方法,為登錄和注冊(cè)請(qǐng)求提供自定義的功能。

登錄控制器
我們首先來(lái)看 LoginController.php 控制器。此控制器包含兩個(gè)方法:showLoginForm() 和 login()。

showLoginForm() 方法返回登錄表單視圖(resources/views/auth/login.blade.php),該視圖包含一個(gè)表單,用戶(hù)可以輸入登錄名和密碼。這個(gè)方法是由 Laravel 所提供的。

public function showLoginForm()
{

return view('auth.login');

}

login() 方法是真正實(shí)現(xiàn)登錄邏輯的地方。這個(gè)方法接收一個(gè) IlluminateHttpRequest 實(shí)例,并使用該實(shí)例的 validate() 方法驗(yàn)證用戶(hù)輸入。如果表單驗(yàn)證成功,Laravel 將自動(dòng)搜索使用給定登錄名和密碼的用戶(hù),并將其登錄到應(yīng)用程序中。

public function login(Request $request)
{

$request->validate([     'email' => 'required|string|email',     'password' => 'required|string',     'remember' => 'boolean' ]);  $credentials = $request->only('email', 'password');  if (Auth::attempt($credentials, $request->remember)) {     return redirect()->intended('dashboard'); }  return redirect()->back()->withInput($request->only('email', 'remember'));

}

注意,attempt() 方法將根據(jù)給定的憑據(jù)來(lái)自動(dòng)檢查密碼是否正確。如果密碼不正確,則會(huì)返回 false。

如果用戶(hù)已經(jīng)成功驗(yàn)證,并且他們之前請(qǐng)求的 URL 被存儲(chǔ)起來(lái)(通常指被 auth 中間件阻止的URL),我們可以使用 Laravel 輔助函數(shù) intended() 來(lái)將其重定向到該 URL。如果未存儲(chǔ)任何 URL,則重定向到前端控件臺(tái)(/dashboard)。

注冊(cè)控制器
接下來(lái)我們來(lái)看 RegisterController.php 控制器。除了 Laravel 的默認(rèn)方法之外,我們還需要實(shí)現(xiàn) register() 方法。

register() 方法非常類(lèi)似于 login() 方法。它接收一個(gè) IlluminateHttpRequest 實(shí)例,并使用該實(shí)例的 validate() 方法驗(yàn)證用戶(hù)輸入。如果表單驗(yàn)證成功,Laravel 將創(chuàng)建一個(gè)新用戶(hù),并將其保存到數(shù)據(jù)庫(kù)中。然后,我們可以使用 Laravel 的默認(rèn)行為將用戶(hù)登錄到應(yīng)用程序中。

public function register(Request $request)
{

$request->validate([     'name' => 'required|string|max:255',     'email' => 'required|string|email|max:255|unique:users',     'password' => 'required|string|min:6|confirmed', ]);  $user = User::create([     'name' => $request->name,     'email' => $request->email,     'password' => Hash::make($request->password), ]);  Auth::login($user);  return redirect()->intended('dashboard');

}

在注冊(cè)控制器中我們可以使用 Hash 輔助函數(shù)來(lái)對(duì)密碼進(jìn)行加密。如果密碼驗(yàn)證成功,我們將創(chuàng)建新用戶(hù)并將其登錄到應(yīng)用程序中。

視圖層
現(xiàn)在我們已經(jīng)定義了必要的路由和控制器,接下來(lái)需要?jiǎng)?chuàng)建身份驗(yàn)證視圖。

在 resources/views/auth 目錄中,我們可以創(chuàng)建 login.blade.php 和 register.blade.php 兩個(gè)視圖文件。這些視圖包含登錄和注冊(cè)表單,使用了一些 Laravel 幫助程序,可以處理表單驗(yàn)證并顯示錯(cuò)誤消息。

登錄視圖
在 login.blade.php 文件中,我們可以使用 Laravel 的 Form 輔助函數(shù)創(chuàng)建登錄表單。這個(gè)函數(shù)會(huì)自動(dòng)為表單添加 CSRF 令牌,并為輸入字段編寫(xiě) HTML 標(biāo)記。

@csrf  <div class="form-group row">     <label for="email" class="col-sm-4 col-form-label text-md-right">{{ __('Email Address') }}</label>      <div class="col-md-6">         <input id="email" type="email" class="form-control{{ $errors-&gt;has('email') ? ' is-invalid' : '' }}" name="email" value="{{ old('email') }}" required autofocus>          @if ($errors-&gt;has('email'))             <span class="invalid-feedback" role="alert">                 <strong>{{ $errors-&gt;first('email') }}</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-6">         <input id="password" type="password" class="form-control{{ $errors-&gt;has('password') ? ' is-invalid' : '' }}" name="password" required>          @if ($errors-&gt;has('password'))             <span class="invalid-feedback" role="alert">                 <strong>{{ $errors-&gt;first('password') }}</strong>             </span>         @endif     </div> </div>  <div class="form-group row">     <div class="col-md-6 offset-md-4">         <div class="form-check">             <input class="form-check-input" type="checkbox" name="remember" id="remember" old :><label class="form-check-label" for="remember">                 {{ __('Remember Me') }}             </label>         </div>     </div> </div>  <div class="form-group row mb-0">     <div class="col-md-8 offset-md-4">         <button type="submit" class="btn btn-primary">             {{ __('Login') }}         </button>          @if (Route::has('password.request'))             <a class="btn btn-link" href="%7B%7B%20route('password.request')%20%7D%7D">                 {{ __('Forgot Your Password?') }}             </a>         @endif     </div> </div>

注意,我們使用了 Blade 模板引擎的 @csrf 和 @if 語(yǔ)句來(lái)生成必要的 CSRF 令牌并顯示驗(yàn)證錯(cuò)誤。

注冊(cè)視圖
在 register.blade.php 文件中,我們可以使用 Laravel 的 Form 幫助器創(chuàng)建注冊(cè)表單。這個(gè)函數(shù)自動(dòng)為表單添加 CSRF 令牌,并為輸入字段編寫(xiě) HTML 標(biāo)記。

@csrf  <div class="form-group row">     <label for="name" class="col-md-4 col-form-label text-md-right">{{ __('Name') }}</label>      <div class="col-md-6">         <input id="name" type="text" class="form-control{{ $errors-&gt;has('name') ? ' is-invalid' : '' }}" name="name" value="{{ old('name') }}" required autofocus>          @if ($errors-&gt;has('name'))             <span class="invalid-feedback" role="alert">                 <strong>{{ $errors-&gt;first('name') }}</strong>             </span>         @endif     </div> </div>  <div class="form-group row">     <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>      <div class="col-md-6">         <input id="email" type="email" class="form-control{{ $errors-&gt;has('email') ? ' is-invalid' : '' }}" name="email" value="{{ old('email') }}" required>          @if ($errors-&gt;has('email'))             <span class="invalid-feedback" role="alert">                 <strong>{{ $errors-&gt;first('email') }}</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-6">         <input id="password" type="password" class="form-control{{ $errors-&gt;has('password') ? ' is-invalid' : '' }}" name="password" required>          @if ($errors-&gt;has('password'))             <span class="invalid-feedback" role="alert">                 <strong>{{ $errors-&gt;first('password') }}</strong>             </span>         @endif     </div> </div>  <div class="form-group row">     <label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>      <div class="col-md-6">         <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required> </div> </div>  <div class="form-group row mb-0">     <div class="col-md-6 offset-md-4">         <button type="submit" class="btn btn-primary">             {{ __('Register') }}         </button>     </div> </div>

注意,我們使用了 Blade 模板引擎的 @csrf 和 @if 語(yǔ)句來(lái)生成必要的 CSRF 令牌并顯示驗(yàn)證錯(cuò)誤消息。

結(jié)論
通過(guò) Laravel 可以快速、方便、安全地實(shí)現(xiàn) Web 應(yīng)用程序的登錄和注冊(cè)身份驗(yàn)證功能,從而保護(hù)您的應(yīng)用程序免受未授權(quán)的訪問(wèn)。在本文中,我們介紹了 Laravel 的身份驗(yàn)證系統(tǒng)并實(shí)現(xiàn)了注冊(cè)和登錄。現(xiàn)在,您可以使用這些基礎(chǔ)知識(shí)構(gòu)建更完整的用戶(hù)身份驗(yàn)證系統(tǒng),或?qū)⑵浼傻侥默F(xiàn)有應(yīng)用程序中。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊13 分享
站長(zhǎng)的頭像-小浪學(xué)習(xí)網(wǎng)月度會(huì)員