当前位置: 首页 > 后端技术 > PHP

Laravel6.2新增用户登录密码确认流程

时间:2023-03-29 18:17:45 PHP

本文转自专业的Laravel开发者社区,原文链接:https://learnku.com/laravel/t...Laravel昨天发布了v6.2版本,它添加了一个新的密码确认功能,允许您要求登录用户在访问路由之前重新输入密码。此功能类似于执行敏感操作时的GitHub确认对话框。您可以在Laravel中轻松设置它,所以让我们尝试一下新功能,这样您就可以更好地了解它是如何工作的:设置首先,为了更好地感受这个新功能,让我们创建一个新的Laravel应用程序:laravelnewconfirm-appcdconfirm-appcomposerrequirelaravel/ui--dev如你所知,make:auth命令在Laravel6中被移除,同样的功能已经迁移到官方扩展包laravel/ui中。让我们使用新命令生成用户认证相关的代码:phpartisanuivue--authyarninstallyarndev接下来我们配置SQLite数据库(当然你可以选择你要使用的数据库):touchdatabase/database.sqlite我们已经创建了Laravel并正在使用sqlite驱动所需的默认配置文件,但是您仍然需要更新.env文件以确保数据库连接和路径正确:DB_CONNECTION=sqlite#...#使用默认路径对于sqlite驱动程序#DB_DATABASE=laravel接下来,让我们运行迁移,然后创建一个测试用户:phpartisanmigrate我们可以通过factory()方法在控制台中创建一个测试用户:phpartisantinker>>>$user=factory(App\User::class)->create([...'password'=>bcrypt('secret'),...'email'=>'admin@example.com'...]);编写控制器假设您希望用户在管理操作(例如密钥)之前查看诸如添加SSHRevalidate其密码之类的内容。我们希望用户在配置的窗口(默认为三小时)内重新输入密码。我们将创建一个假的/settings/ssh/create路由,我们需要新的密码。在用户创建新密钥之前确认中间件:phpartisanmake:controllerSettings/SSHController接下来,在这个控制器中创建方法create():命名空间App\Http\Controllers\Settings;使用App\Http\Controllers\Controller;使用Illuminate\Http\Request;classSSHControllerextendsController{publicfunctioncreate(){returnview('secret');我们将存根秘密模板并将其放在视图路径的根目录中resources/views/secret.blade.php:@extends('layouts.app')@section('content')

添加新的SSH密钥

此页面仅在密码确认后显示.

@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中间件认证的Routes聚合在一起。在此演示中,我们在Settings命名空间内创建了一个控制器。使用它,一旦登录,您将被重定向到/home,导航到/settings/ssh/create,系统会提示您输入密码:如果您按照教程进行操作,请输入密码,提交表单,然后输入创建视图。确认密码后,您可以在没有提示的情况下刷新此页面。使用新的ddd()辅助函数,添加到您的SSHController::create()方法中,它将在下次提示时确定auth.password_confirmed_中会话的值:publicfunctioncreate(){ddd(session('auth'));returnview('secret');}这是最后一次密码验证时间。默认情况下,3小时内不会提醒用户再次验证密码。当然你可以通过修改config('auth.password_timeout')配置项来自定义(该配置项定义在config/auth.php配置文件中)。了解更多非常感谢DriesVints为我们带来了Laravel6.2版本中包含的这个很棒的新功能,您可以在PullRequest#5129中了解更多关于中间件的实现细节。