Laravel 6.2 登录用户的新密码确认流程

发布时间 作者

New Password Confirmation Flow for Logged In Users in Laravel 6.2 image

Laravel 昨天发布了 v6.2 版本,其中包含一个新的密码确认功能,允许您要求登录用户在被允许访问路由之前重新输入他们的密码。

此功能的工作原理类似于您在执行敏感操作时 GitHub 的确认屏幕。在 Laravel 中设置它非常容易,所以让我们来尝试一下这个新功能,这样您就可以看到它是如何工作的。

设置

首先,让我们创建一个新的 Laravel 应用程序来使用,以便您可以直观地看到此新功能是如何工作的。

laravel new confirm-app
cd confirm-app
composer require laravel/ui --dev

如果您还记得,make:auth 命令已在 Laravel 6 中删除,并移至 laravel/ui 一级包。让我们为我们的应用程序生成授权代码。

php artisan ui vue --auth
yarn install
yarn dev

接下来,让我们配置一个 SQLite 数据库(您可以随意使用任何您喜欢的驱动程序)。

touch database/database.sqlite

我们已经创建了 Laravel 在使用 sqlite 驱动程序时默认查找的文件,但您需要更新 .env 文件,其中包含正确的连接和数据库路径。

DB_CONNECTION=sqlite
# ...
# Use the default path of the sqlite driver
# DB_DATABASE=laravel

接下来,让我们运行迁移,然后创建一个测试用户。

php artisan migrate

我们可以通过控制台使用 factory() 创建一个测试用户。

php artisan tinker
>>> $user = factory(App\User::class)->create([
... 'password' => bcrypt('secret'),
... 'email' => '[email protected]'
... ]);

编写控制器

假设您希望用户在查看管理操作(如添加 SSH 密钥)之前重新验证他们的密码。我们希望用户在配置的时间窗口内重新输入他们的密码(默认值为 3 小时)。

我们将创建一个假的 /settings/ssh/create 路由,在该路由中,我们将要求用户在创建新密钥之前使用新的 password.confirm 中间件。

php artisan make:controller Settings/SSHController

接下来,创建控制器操作 create()

namespace App\Http\Controllers\Settings;
 
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
 
class SSHController extends Controller
{
public function create()
{
return view('secret');
}
}

我们将模拟 secret 模板,我们将它放在视图路径的根目录 resources/views/secret.blade.php 中。

@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<h1>Add a New SSH Key</h1>
<p>This page is only shown after password confirmation.</p>
</div>
</div>
</div>
@endsection

在撰写本文时,您需要将 auth/passwords/confirm.blade.php 文件复制到您的项目中。您可以在这里获取模板:ui/confirm.stub。复制此文件并将其添加到您项目的以下路径中。

resources/views/auth/passwords/confirm.blade.php

接下来,我们需要在 routes/web.php 文件末尾定义路由,以及为此需要的中间件。

Route::namespace('Settings')
->middleware(['auth'])
->group(function () {
Route::get('/settings/ssh/create', 'SSHController@create')->middleware('password.confirm');
});

注意:通常,您可能会将所有需要身份验证的路由与 auth 中间件一起分组。在本演示中,我们将在 Settings 命名空间中创建一个控制器路由。

完成这些操作后,您登录后将被重定向到 /home。从那里,导航到 /settings/ssh/create,然后系统会提示您输入密码。

如果您按照本教程进行操作,请输入 secret,提交表单,然后您将被带到 create 视图。在确认密码后,您可以刷新此页面,而不会收到提示。

使用新的 ddd() 助手,将此添加到您的 SSHController::create() 方法中,以可视化确定下次提示您的 auth.password_confirmed_at 会话值。

public function create()
{
ddd(session('auth'));
return view('secret');
}

此值是上次确认密码的时间戳。默认情况下,中间件不会在 3 小时内重新提示。您可以使用 config('auth.password_timeout') 值(位于 config/auth.php 中,截至 v6.2.0 版本)来控制用户在再次确认密码之前应等待多长时间。

了解更多

首先,感谢 Dries Vints 提供了这个很棒的新功能!查看 拉取请求 #5129 以了解实现细节。使用 Laravel 6.2 创建的任何新的 Laravel 应用程序都包含此新中间件!

Paul Redmond photo

Laravel 新闻的撰稿人。全栈 Web 开发人员和作家。

归档于
Cube

Laravel 新闻通讯

加入 40,000 多名其他开发者,永不错过新的技巧、教程等等。

Laravel Forge logo

Laravel Forge

轻松创建和管理您的服务器,并在几秒钟内部署您的 Laravel 应用程序。

Laravel Forge
Tinkerwell logo

Tinkerwell

Laravel 开发人员必备的代码运行器。使用 AI、自动完成和对本地和生产环境的即时反馈进行微调。

Tinkerwell
No Compromises logo

不妥协

Joel 和 Aaron 是来自 No Compromises 播客的两名经验丰富的开发人员,现在可以为您的 Laravel 项目聘用他们。 ⬧ 固定价格为 7,500 美元/月。 ⬧ 没有冗长的销售流程。 ⬧ 没有合同。 ⬧ 100% 返款保证。

不妥协
Kirschbaum logo

Kirschbaum

提供创新和稳定性,确保您的 Web 应用程序取得成功。

Kirschbaum
Shift logo

Shift

运行旧版本的 Laravel?即时、自动化的 Laravel 升级和代码现代化,让您的应用程序保持新鲜感。

Shift
Bacancy logo

Bacancy

为您的项目配备经验丰富的 Laravel 开发人员,拥有 4-6 年的经验,每月只需 2,500 美元。获得 160 小时的专用专业知识和 15 天的无风险试用。立即预约通话!

Bacancy
Lucky Media logo

Lucky Media

立即获得幸运 - Laravel 开发的理想选择,拥有超过十年的经验!

Lucky Media
Lunar: Laravel E-Commerce logo

Lunar:Laravel 电子商务

Laravel 的电子商务。一个开源包,将现代无头电子商务功能的力量带到 Laravel。

Lunar:Laravel 电子商务
LaraJobs logo

LaraJobs

官方 Laravel 工作板

LaraJobs
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit:Laravel SaaS 启动工具包

SaaSykit 是一个 Laravel SaaS 启动工具包,它包含运行现代 SaaS 所需的所有功能。付款、漂亮的结账、管理面板、用户仪表板、身份验证、现成的组件、统计数据、博客、文档等等。

SaaSykit:Laravel SaaS 启动工具包
Rector logo

Rector

您无缝 Laravel 升级、降低成本和加速创新的合作伙伴,助力企业取得成功。

Rector
MongoDB logo

MongoDB

通过 MongoDB 和 Laravel 的强大集成来增强您的 PHP 应用程序,使开发人员能够轻松高效地构建应用程序。支持事务、搜索、分析和移动用例,同时使用熟悉的 Eloquent API。了解 MongoDB 灵活的现代数据库如何改变您的 Laravel 应用程序。

MongoDB
Maska is a Simple Zero-dependency Input Mask Library image

Maska 是一个简单的无依赖输入遮罩库。

阅读文章
Add Swagger UI to Your Laravel Application image

将 Swagger UI 添加到您的 Laravel 应用程序

阅读文章
Assert the Exact JSON Structure of a Response in Laravel 11.19 image

在 Laravel 11.19 中断言响应的精确 JSON 结构

阅读文章
Build SSH Apps with PHP and Laravel Prompts image

使用 PHP 和 Laravel Prompts 构建 SSH 应用程序

阅读文章
Building fast, fuzzy site search with Laravel and Typesense image

使用 Laravel 和 Typesense 构建快速、模糊的网站搜索

阅读文章
Add Comments to your Laravel Application with the Commenter Package image

使用 Commenter 包为您的 Laravel 应用程序添加评论

阅读文章