首頁  >  文章  >  php框架  >  laravel 實現登入註冊

laravel 實現登入註冊

WBOY
WBOY原創
2023-05-20 21:10:10937瀏覽

Laravel 是一種流行的 PHP 框架,它提供了一個強大的開發環境,可以讓您更輕鬆地建立 Web 應用程式。其中一個重要的特性是 Laravel 自備的身份驗證系統,可讓您快速實現使用者認證,包括登入和註冊。在本文中,我們將示範如何使用 Laravel 實作登入註冊。

部署環境
在開始實作身份驗證之前,我們需要確保 Laravel 環境已經配置好且資料庫連線已經設定。如果您還沒有安裝 Laravel,可以參考官方文件中的安裝指南。在 Laravel 應用程式中,我們使用 Artisan 命令列工具建立必要的檔案和目錄結構。在命令列中,我們可以使用以下命令建立新的Laravel 應用程式:

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

#「建立之後,導航到應用程式的根目錄,執行以下命令產生應用程式金鑰:

php artisan key:generate

註冊路由
在Laravel 中,路由是連接URI 和對應控制器方法的橋樑。要註冊我們的身份驗證路由,我們需要更新 routes/web.php 檔案。在這個檔案中,我們定義了應用程式的路由,其中​​包括登入和註冊路由。

首先,我們需要定義發送 POST 請求到 /register 的路由,並將其綁定到 RegisterController 的 register() 方法。這將呈現一個註冊表單,使用者可以填寫其使用者名稱和密碼。

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

接下來,我們需要定義發送POST 請求到/login的路由,並將其綁定到LoginController 的login() 方法。這將呈現一個登入表單,使​​用者可以填寫登入名稱和密碼。如果使用者沒有有效的憑證進行驗證,則應用程式會重新導向至登入表單。

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

最後,我們需要定義所有受保護的路由。在 Laravel 中,我們可以使用 auth 中間件來確保使用者已經通過身份驗證。這個中間件將自動重定向未經驗證的使用者到 /login 路由。

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

// your protected routes go here

});

處理控制器
我們已經定義了必要的路由,現在需要在控制器中處理它們。在 Laravel 中,控制器是處理特定 HTTP 請求的類,控制器中的方法會傳回 HTTP 回應。在應用程式中,我們需要建立兩個控制器用於處理註冊和登入請求。

在 app/Http/Controllers/Auth 目錄下,建立 LoginController.php 和 RegisterController.php 兩個文件,這兩個文件是 Laravel 自帶的控制器類別。在這些控制器中,我們需要覆寫 Laravel 的預設方法,為登入和註冊請求提供自訂的功能。

登入控制器
我們先來看看 LoginController.php 控制器。此控制器包含兩個方法:showLoginForm() 和 login()。

showLoginForm() 方法傳回登入表單檢視(resources/views/auth/login.blade.php),該視圖包含一個表單,使用者可以輸入登入名稱和密碼。這個方法是由 Laravel 所提供的。

public function showLoginForm()
{

return view('auth.login');

}

login() 方法是真正實作登入邏輯的地方。這個方法接收一個 IlluminateHttpRequest 實例,並使用該實例的 validate() 方法驗證使用者輸入。如果表單驗證成功,Laravel 將自動搜尋使用給定登入名稱和密碼的用戶,並將其登入應用程式中。

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() 方法將根據給定的憑證自動檢查密碼是否正確。如果密碼不正確,則會傳回 false。

如果使用者已經成功驗證,並且他們先前要求的URL 被儲存起來(通常指被auth 中間件阻止的URL),我們可以使用Laravel 輔助函數intended() 將其重定向到該URL 。如果未儲存任何 URL,則重新導向至前端控制台(/dashboard)。

註冊控制器
接下來我們來看看 RegisterController.php 控制器。除了 Laravel 的預設方法之外,我們還需要實作 register() 方法。

register() 方法非常類似 login() 方法。它接收一個 IlluminateHttpRequest 實例,並使用該實例的 validate() 方法驗證使用者輸入。如果表單驗證成功,Laravel 將建立一個新用戶,並將其儲存到資料庫中。然後,我們可以使用 Laravel 的預設行為將使用者登入應用程式中。

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');

}

在註冊控制器中我們可以使用 Hash 輔助函數來加密密碼。如果密碼驗證成功,我們將建立新使用者並將其登入應用程式中。

視圖層
現在我們已經定義了必要的路由和控制器,接下來需要建立驗證視圖。

在 resources/views/auth 目录中,我们可以创建 login.blade.php 和 register.blade.php 两个视图文件。这些视图包含登录和注册表单,使用了一些 Laravel 帮助程序,可以处理表单验证并显示错误消息。

登录视图
在 login.blade.php 文件中,我们可以使用 Laravel 的 Form 辅助函数创建登录表单。这个函数会自动为表单添加 CSRF 令牌,并为输入字段编写 HTML 标记。

71085032ff00cb55c43cd8d91e1cd1ac

@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->has('email') ? ' is-invalid' : '' }}" name="email" value="{{ old('email') }}" required autofocus>

        @if ($errors->has('email'))
            <span class="invalid-feedback" role="alert">
                <strong>{{ $errors->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->has('password') ? ' is-invalid' : '' }}" name="password" required>

        @if ($errors->has('password'))
            <span class="invalid-feedback" role="alert">
                <strong>{{ $errors->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('remember') ? 'checked' : '' }}>

            <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="{{ route('password.request') }}">
                {{ __('Forgot Your Password?') }}
            </a>
        @endif
    </div>
</div>

f5a47148e367a6035fd7a2faa965022e

注意,我们使用了 Blade 模板引擎的 @csrf 和 @if 语句来生成必要的 CSRF 令牌并显示验证错误。

注册视图
在 register.blade.php 文件中,我们可以使用 Laravel 的 Form 帮助器创建注册表单。这个函数自动为表单添加 CSRF 令牌,并为输入字段编写 HTML 标记。

b42125e3aba3ade041a95113cf783d0b

@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->has('name') ? ' is-invalid' : '' }}" name="name" value="{{ old('name') }}" required autofocus>

        @if ($errors->has('name'))
            <span class="invalid-feedback" role="alert">
                <strong>{{ $errors->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->has('email') ? ' is-invalid' : '' }}" name="email" value="{{ old('email') }}" required>

        @if ($errors->has('email'))
            <span class="invalid-feedback" role="alert">
                <strong>{{ $errors->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->has('password') ? ' is-invalid' : '' }}" name="password" required>

        @if ($errors->has('password'))
            <span class="invalid-feedback" role="alert">
                <strong>{{ $errors->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>

f5a47148e367a6035fd7a2faa965022e

注意,我们使用了 Blade 模板引擎的 @csrf 和 @if 语句来生成必要的 CSRF 令牌并显示验证错误消息。

结论
通过 Laravel 可以快速、方便、安全地实现 Web 应用程序的登录和注册身份验证功能,从而保护您的应用程序免受未授权的访问。在本文中,我们介绍了 Laravel 的身份验证系统并实现了注册和登录。现在,您可以使用这些基础知识构建更完整的用户身份验证系统,或将其集成到您的现有应用程序中。

以上是laravel 實現登入註冊的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn