【发布时间】:2021-03-08 05:48:48
【问题描述】:
我正在寻找将标准 Jetstream Auth 更改为使用用户名或电子邮件进行身份验证的解决方案。这意味着在您输入电子邮件或用户名的帐户注册过程中(始终需要用户名)。在登录表单中,您可以输入用户名或电子邮件作为您的凭据。我还更改了配置文件设置以更新用户名。
我的实际问题是
-
在仅使用用户名注册期间,我收到空电子邮件字段的错误 registration error
-
在登录期间,用户名将不是正确的凭据
我已经更改了与帖子Problem authenticating with username and password in Laravel 8 类似的所有内容,但它不起作用。
1.更改config/fortify.php
'username' => 'email' to 'username' => 'identity'
2.在启动方法中app/Providers/FortifyServiceProvider.php添加验证码
Fortify::authenticateUsing(function (LoginRequest $request) {
$user = User::where('email', $request->identity)
->orWhere('username', $request->identity)->first();
if (
$user &&
\Hash::check($request->password, $user->password)
) {
return $user;
}
});
还添加了类
use Laravel\Fortify\Http\Requests\LoginRequest;
use App\Models\User;
3.注册时添加用户名
在register.blade.php下添加输入字段
<div class="mt-4">
<x-jet-label for="username" value="{{ __('User Name') }}" />
<x-jet-input id="username" class="block mt-1 w-full" type="text" name="username" :value="old('username')" required autofocus autocomplete="username" />
</div>
并从电子邮件表单字段中删除required。
4.将用户名添加到用户模型
protected $fillable = [
'name',
'email',
'password',
'username',
];
更改app/Actions/Fortify/CreateNewUser.php
Validator::make($input, [
'name' => ['required', 'string', 'max:255'],
'email' => ['string', 'email', 'max:255', 'unique:users'],
'username' => ['required', 'string', 'max:255', 'unique:users'],
'password' => $this->passwordRules(),
])->validate();
return User::create([
'name' => $input['name'],
'email' => $input['email'],
'username' => $input['username'],
'password' => Hash::make($input['password']),
]);
5.将用户名字段添加到数据库
Schema::table('users', function (Blueprint $table) {
$table->string('username')->nullable();
});
【问题讨论】:
-
有人知道如何解决这个问题吗?
标签: php laravel laravel-8 laravel-livewire jetstream