返回

守护账号安全——Laravel 6.2 新增密码确认功能

见解分享

Laravel 6.2密码确认功能概述

Laravel 6.2 新增的密码确认功能允许你在执行敏感操作时,要求已登录用户重新输入密码,从而提供额外的安全保护。这个功能特别适用于需要确保用户身份的操作,例如:

  • 密码重置
  • 个人信息修改
  • 敏感数据访问
  • 高价值交易操作

如何在 Laravel 6.2 中启用密码确认功能

设置密码确认功能非常简单,只需按照以下步骤操作即可:

  1. 在你的 app/Http/Middleware/Authenticate 类中,添加 CheckPassword 中间件。
  2. 运行 php artisan make:middleware CheckPassword 命令生成 CheckPassword 中间件。
  3. CheckPassword 中间件中,添加以下代码:
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class CheckPassword
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        if (Auth::check() && $request->is('route/requiring/password')) {
            return redirect()->route('password.confirm');
        }

        return $next($request);
    }
}
  1. routes/web.php 文件中,将 password.confirm 路由指向 Auth\ConfirmPasswordController 控制器的 show 方法。
<?php

Route::get('password/confirm', 'Auth\ConfirmPasswordController@show')->middleware('checkPassword');
  1. resources/views/auth/passwords/confirm.blade.php 文件中,创建密码确认表单。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    
</head>
<body>
    <h1>密码确认</h1>

    <form action="{{ route('password.confirm') }}" method="POST">
        @csrf

        <label for="password">密码:</label>
        <input type="password" name="password" id="password">

        <button type="submit">确认</button>
    </form>
</body>
</html>
  1. Auth\ConfirmPasswordController 控制器的 confirm 方法中,验证用户输入的密码是否正确。
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class ConfirmPasswordController extends Controller
{
    /**
     * Show the confirm password view.
     *
     * @return \Illuminate\View\View
     */
    public function show()
    {
        return view('auth.passwords.confirm');
    }

    /**
     * Confirm the user's password.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
     */
    public function confirm(Request $request)
    {
        if (Auth::check() && Auth::user()->password == bcrypt($request->password)) {
            return redirect()->intended('/');
        }

        return back()->withErrors([
            'password' => '密码错误。',
        ]);
    }
}

结语

这就是如何在 Laravel 6.2 中设置和使用密码确认功能的全部过程。希望本教程对你有帮助,也希望你能够在自己的项目中应用这一新功能,为你的用户提供更安全的体验。