Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
Laravel 8 登录字段定制:将默认邮箱登录切换为用户名登录_创想鸟

Laravel 8 登录字段定制:将默认邮箱登录切换为用户名登录

Laravel 8 登录字段定制:将默认邮箱登录切换为用户名登录

本教程详细指导如何在 laravel 8 中将默认的用户登录凭证从邮箱(email)更改为用户名(name)。通过覆盖 `logincontroller` 中的 `username()` 方法,并确保前端表单和数据库结构匹配,开发者可以轻松实现基于用户名的自定义登录功能,解决仅修改视图文件导致登录失败的问题。

Laravel 提供了强大而灵活的认证系统,默认情况下,它使用用户的邮箱地址作为登录凭证。然而,在许多实际应用中,开发者可能需要将登录凭证更改为用户名(或任何其他唯一字段)。本文将详细介绍如何在 Laravel 8 项目中,将默认的邮箱登录机制定制为使用用户名进行认证。

理解 Laravel 默认登录机制

Laravel 的认证功能主要通过 AuthenticatesUsers trait 提供,该 trait 被 LoginController 所使用。这个 trait 内部通过一个名为 username() 的方法来确定用于认证的字段名。默认情况下,AuthenticatesUsers trait 中的 username() 方法返回 ’email’,这意味着 Laravel 会尝试使用 email 字段来匹配用户。

因此,即使您在 login.blade.php 视图文件中将登录输入框的 name 属性从 email 更改为 name,后端认证逻辑仍然会尝试查找 email 字段,导致登录尝试失败,或出现页面加载但无任何变化的情况。

实现自定义用户名登录

要将 Laravel 的默认登录凭证从邮箱切换到用户名,核心在于覆盖 LoginController 中默认的 username() 方法。

1. 修改 LoginController

打开 app/Http/Controllers/Auth/LoginController.php 文件。在该控制器中,您需要添加或修改 username() 方法,使其返回您希望用于登录的字段名,即 ‘name’。

namespace AppHttpControllersAuth;use AppHttpControllersController;use AppProvidersRouteServiceProvider;use IlluminateFoundationAuthAuthenticatesUsers;class LoginController extends Controller{    use AuthenticatesUsers;    /**     * 登录后用户重定向的路径。     *     * @var string     */    protected $redirectTo = RouteServiceProvider::HOME;    /**     * 创建一个新的控制器实例。     *     * @return void     */    public function __construct()    {        $this->middleware('guest')->except('logout');    }    /**     * 获取控制器将使用的登录用户名。     *     * @return string     */    public function username()    {        return 'name'; // 将默认的 'email' 替换为 'name'    }}

通过添加上述 username() 方法,您告诉 Laravel 的认证系统,在进行用户认证时,应该使用请求中的 name 字段来匹配数据库中的 name 字段。

2. 确保前端表单与数据库字段一致

除了修改控制器,还需要确保前端登录表单和后端数据库结构都与您的自定义设置保持一致。

登录视图 (login.blade.php):确保您的登录表单中,用于输入用户名的 input 元素的 name 属性设置为 name。这确保了用户输入的值能够以正确的键名发送到服务器。

@error('name') {{ $message }} @enderror

用户模型 (app/Models/User.php):确认 User 模型中的 $fillable 数组包含 name 字段,以便在注册时可以进行批量赋值。

namespace AppModels;use IlluminateContractsAuthMustVerifyEmail;use IlluminateDatabaseEloquentFactoriesHasFactory;use IlluminateFoundationAuthUser as Authenticatable;use IlluminateNotificationsNotifiable;use LaravelSanctumHasApiTokens;class User extends Authenticatable{    use HasApiTokens, HasFactory, Notifiable;    // use HighIdeasUsersOnlineTraitsUsersOnlineTrait; // 如果您使用了此 trait    /**     * 可批量赋值的属性。     *     * @var string[]     */    protected $fillable = [        'name', // 确保 'name' 字段在这里        'password',        'skills',        'education',        'sponsor',        'telegram',    ];    // ... 其他模型定义 ...}

数据库迁移 (database/migrations/xxxx_xx_xx_xxxxxx_create_users_table.php):验证 users 表的迁移文件中包含 name 字段,并且通常应该设置为 unique 以确保用户名的唯一性。

use IlluminateDatabaseMigrationsMigration;use IlluminateDatabaseSchemaBlueprint;use IlluminateSupportFacadesSchema;class CreateUsersTable extends Migration{    /**     * 运行数据库迁移。     *     * @return void     */    public function up()    {        Schema::create('users', function (Blueprint $table) {            $table->id();            $table->string('name')->nullable()->unique(); // 确保 name 字段存在且为 unique            $table->string('education')->nullable();            $table->string('sponsor')->nullable();            $table->string('telegram')->unique();            $table->boolean('is_admin')->default(0);            $table->text('skills')->nullable();            $table->boolean('is_deleted')->default(0);            $table->boolean('is_verified')->default(0);            $table->boolean('is_banned')->default(0);            $table->integer('rank')->default(0);                     $table->string('password');            $table->rememberToken();            $table->timestamps();        });    }    /**     * 回滚数据库迁移。     *     * @return void     */    public function down()    {        Schema::dropIfExists('users');    }}

注意事项

字段唯一性: 当使用用户名作为登录凭证时,务必确保数据库中的 name 字段是唯一的 (->unique())。这可以防止多个用户拥有相同的用户名,从而避免认证冲突和安全问题。注册逻辑: 确保您的注册逻辑(通常在 RegisterController 中)正确地将用户输入的用户名存储到 name 字段中。从提供的 register.blade.php 来看,它已经正确地将用户名输入框的 name 属性设置为 name。验证规则: 在注册和登录时,为 name 字段添加适当的验证规则(例如 required|string|max:255|unique:users),以确保数据的完整性和安全性。用户体验: 考虑是否允许用户在注册后更改其用户名,以及更改后可能对用户登录体验产生的影响。

总结

通过在 LoginController 中简单地覆盖 username() 方法,并确保前端表单和数据库结构的一致性,您可以轻松地将 Laravel 的默认认证机制从邮箱切换到用户名。这种方法灵活且侵入性小,是 Laravel 框架设计优雅性的体现,允许开发者根据项目需求定制认证行为。完成这些步骤后,您的 Laravel 应用程序将能够使用用户名而非邮箱进行用户登录。

以上就是Laravel 8 登录字段定制:将默认邮箱登录切换为用户名登录的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1329179.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
深入理解PHP的类型转换:== 操作符下的字符串与整数比较行为
上一篇 2025年12月12日 15:24:51
PHP日历中当前日期显示与导航的精确控制
下一篇 2025年12月12日 15:24:59

相关推荐

  • PHP中操作JSON数组对象:添加与修改属性的实践指南

    本教程详细阐述如何在php中高效地处理包含对象的json数组。我们将学习如何利用`json_decode()`将json字符串转换为php数据结构,进而为数组中的现有对象添加或修改属性,并通过`json_encode()`将其转换回json字符串,避免手动构建json的常见错误。 在现代Web开发中…

    2026年9月22日
    1200
  • windows怎么更改计算机工作组_Windows计算机工作组修改方法

    首先通过系统属性修改工作组名称,右键“此电脑”选择属性,进入高级系统设置的计算机名选项卡进行更改并重启;其次可用管理员命令提示符执行wmic命令批量配置,输入指定命令后重启生效;最后专业版用户可通过组策略编辑器,在启动脚本中添加指令实现自动加入工作组。 如果您需要将Windows计算机加入或更改到特…

    2026年9月22日
    000
  • 机械键盘轴体深度手感分析:线性轴、段落轴与提前段落轴

    机械键盘手感取决于轴体类型,主流分为线性轴、段落轴和提前段落轴。线性轴直上直下顺滑连贯,代表如Cherry MX Red,适合游戏与快速输入;段落轴中程有明显阻力峰,提供清晰反馈,如Cherry MX Blue,适合文字工作;提前段落轴起步阻力大随后变轻,如TTC Gold Pink,防误触且节奏独…

    2026年9月22日
    000
  • 实现Java双向路径搜索的正确方法

    本文旨在帮助开发者理解并正确实现Java中的双向路径搜索算法。通过分析常见的实现错误,我们将提供一种清晰、可行的解决方案,并详细解释如何构建完整的路径,克服单向搜索树的局限性,从而实现从起点到终点的完整路径搜索。 双向路径搜索是一种优化路径搜索效率的策略,它同时从起点和终点开始搜索,并在中间相遇。然…

    2026年9月22日
    900
  • VSCode设置Markdown写作环境(实用技巧,排版美化指南)

    要在vscode里打造舒服又高效的markdown写作环境,答案是通过安装核心扩展并进行个性化配置来实现;需安装markdown all in one、markdown preview enhanced、prettier和paste image等扩展,结合settings.json中的编辑器设置、自…

    2026年9月22日
    100
  • 如何用Filmora制作高质量AI视频?简易AI视频剪辑的实用指南

    如何用Filmora制作高质量AI视频?简易AI视频剪辑的实用指南如何用Filmora制作高质量AI视频?简易AI视频剪辑的实用指南如何用Filmora制作高质量AI视频?简易AI视频剪辑的实用指南如何用Filmora制作高质量AI视频?简易AI视频剪辑的实用指南

    Filmora的AI功能通过AI Copilot脚本生成、AI文本转视频、AI语音、图像生成、智能抠像及音频优化等工具,显著提升视频制作效率与专业度,尤其在视觉处理、听觉优化和创意辅助方面表现突出;关键在于将AI作为辅助起点,避免过度依赖,结合人工精修,才能实现高质量AI视频创作。 ☞☞☞AI 智能…

    2026年9月22日 • 用户投稿
    400
  • 好用的终端复用神器-Tmux

    好用的终端复用神器-Tmux好用的终端复用神器-Tmux好用的终端复用神器-Tmux好用的终端复用神器-Tmux

    前言 许久之前就听说过tmux,但是一直没上手,直到最近需要一直在linux下完成一些任务,我才切实感受到了tmux的优点:任意分屏、保存工作 就单单这两点,就足够实用了。分屏,曾今还十分痴迷i3wm和dwm这样的窗口管理工具,尤其是dwm的操作逻辑,大大提升linux工作效率。其他详情可以查看阮一…

    2026年9月22日 • 用户投稿
    100
  • 星纪魅族万志强回应魅族22影像升级:10月还会有OTA

    10月13日,星纪魅族集团中国区cmo万志强就用户对魅族22手机影像表现的积极评价作出回应。他表示,本月还将推送新一轮ota更新,届时魅族22的影像性能有望再次提升。 魅族22 据CNMO消息,有用户反馈称:尽管魅族22在发布时拍照能力并非顶尖,但通过数月的系统优化,其影像水准已达到主流旗舰机型80…

    2026年9月22日
    000
  • 如何在DaVinciResolve中制作AI视频?教你利用AI工具优化视频流程

    如何在DaVinciResolve中制作AI视频?教你利用AI工具优化视频流程如何在DaVinciResolve中制作AI视频?教你利用AI工具优化视频流程如何在DaVinciResolve中制作AI视频?教你利用AI工具优化视频流程如何在DaVinciResolve中制作AI视频?教你利用AI工具优化视频流程

    达芬奇Resolve并非一键生成AI视频的%ignore_a_1%,而是通过内置AI功能与外部AI服务协同,提升视频制作效率。其核心在于利用Neural Engine驱动的智能工具,如Magic Mask实现精准抠像、Voice Isolation分离人声、Smart Reframe适配多平台构图、…

    2026年9月22日 • 用户投稿
    700
  • 蔡司 2 亿影像王牌登场!vivo X300 Pro 拍巨片,巨出片!

    蔡司 2 亿影像王牌登场!vivo X300 Pro 拍巨片,巨出片!蔡司 2 亿影像王牌登场!vivo X300 Pro 拍巨片,巨出片!蔡司 2 亿影像王牌登场!vivo X300 Pro 拍巨片,巨出片!蔡司 2 亿影像王牌登场!vivo X300 Pro 拍巨片,巨出片!

    在手机影像技术竞争愈发白热化的当下,vivo x300 pro 以“蔡司 2 亿影像王牌”之名强势亮相。其核心亮点莫过于搭载的蔡司 2 亿像素影像系统,相较传统多摄组合实现了显著跃升。面对用户日益多元的需求——远摄、微距、视频创作样样都想兼顾,这套系统真正做到了“全都要”。起售价为 5299 元,这…

    2026年9月22日 • 用户投稿
    000
  • Java项目类路径管理:引用与实现外部.class文件定义的接口

    在Java项目中引用并实现由.class文件定义的接口,核心在于正确配置Java的类路径(Classpath)。本文将详细介绍类路径的概念、其重要性,以及如何在命令行和集成开发环境(IDE)中有效地设置类路径,确保编译器和JVM能够找到所需的.class文件,从而成功编译和运行包含外部接口实现的代码…

    2026年9月22日
    000
  • VSCode一键配置Rust:中文文档、语法高亮、Cargo集成

    安装Rust Analyzer扩展是VS Code配置Rust开发环境的核心,它提供语法高亮、智能补全、错误提示、定义跳转、Cargo集成等功能,并通过本地中文文档组件支持中文提示,实现开箱即用的高效开发体验。 VS Code配置Rust开发环境,尤其是要兼顾中文文档、语法高亮和Cargo项目管理,…

    2026年9月22日
    100
  • Pictory的AI混合工具如何使用?快速将文本转为视频的实用指南

    Pictory的AI混合工具核心优势在于高效与定制化平衡,能快速将文本转为视频,通过智能识别内容匹配素材、音乐和配音,大幅缩短制作周期;其人机协作模式允许用户优化AI生成结果,结合免版税素材库解决版权问题,提升创作自由度与专业度。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用…

    2026年9月22日
    000
  • 抖音企业号开通员工号流程是什么?企业号开通员工号有何好处?

    抖音企业号开通员工号,是实现团队高效协同、统一维护品牌调性的关键功能。通过将多个员工账号集中管理于主账号之下,企业能够更有序地开展运营工作。本文将全面解析员工号的开通步骤及其为企业带来的核心价值,助力企业在抖音平台实现更高效的营销布局。 一、如何开通抖音企业号员工号? 开通员工号需由企业主账号(即已…

    2026年9月22日
    300
  • MAC上的虚拟机哪个最好用_MAC虚拟机软件推荐

    首选Parallels Desktop,因其在Mac上性能卓越、集成度高,适合运行Windows及图形密集型应用;UTM作为开源替代方案,基于QEMU,支持多系统且可定制性强,适合技术爱好者;VMware Fusion稳定性强,尤其适合企业级Linux虚拟化需求。三者均需通过ISO镜像安装系统,并推…

    2026年9月22日
    000
  • Gradle中控制JAR包生成:理解jar.enabled配置

    本文深入探讨Gradle构建脚本中jar.enabled配置项的作用。它用于控制是否生成项目的默认JAR包。当设置为false时,Gradle将跳过标准的JAR包创建任务,这在项目需要生成其他类型的归档文件或作为多模块项目中的非独立组件时非常有用。理解此配置有助于优化构建过程和管理项目输出。 JAR…

    2026年9月22日
    100
  • 影目INMO获中国移动创新大奖,10.16发布会AI+AR生态要搞“大动作”?

    2025年中国移动全球合作伙伴大会在广州圆满落幕,影目科技作为智能眼镜领域的领军企业受邀出席,并荣膺“终端创新贡献合作伙伴”殊荣。作为中国移动在ai+ar终端生态中的关键战略伙伴,影目科技正携手中国移动共同推进ai智能眼镜在中国市场的规模化落地,助力打造“ai+万物互联”的智慧新生态。此次获奖恰逢影…

    2026年9月22日
    000
  • 动手实验+源码分析,彻底弄懂 Linux 网络命名空间

    动手实验+源码分析,彻底弄懂 Linux 网络命名空间动手实验+源码分析,彻底弄懂 Linux 网络命名空间动手实验+源码分析,彻底弄懂 Linux 网络命名空间动手实验+源码分析,彻底弄懂 Linux 网络命名空间

    大家好,我是飞哥! 在 Linux 上通过 veth 我们可以创建出许多的虚拟设备。通过 Bridge 模拟以太网交换机的方式可以让这些网络设备之间进行通信。不过虚拟化中还有很重要的一步,那就是隔离。借用 Docker 的概念来说,那就是不能让 A 容器用到 B 容器的设备,甚至连看一眼都不可以。只…

    2026年9月22日 • 用户投稿
    000
  • VSCode安装C/C++插件 小白必备VSCode配置C语言教程

    安装C/C++插件并配置MinGW编译器,通过tasks.json和launch.json文件设置编译调试任务,可使VSCode支持C语言开发;若插件异常,需检查环境变量、文件路径及语法,必要时重启或重装;中文乱码可通过设置UTF-8编码、使用集成终端或程序内setlocale解决;远程开发需配合R…

    2026年9月22日
    000
  • 在Java中如何格式化输出日期与时间

    推荐使用Java 8的DateTimeFormatter格式化日期时间,配合LocalDateTime或ZonedDateTime实现安全高效输出,如yyyy-MM-dd HH:mm:ss;2. 传统SimpleDateFormat非线程安全,适用于旧版本。 在Java中格式化输出日期与时间,常用的…

    2026年9月22日
    200

发表回复

登录后才能评论
关注微信