首页 > 解决方案 > 在 Laravel 8 中使用用户名和密码进行身份验证的问题

问题描述

我最近开始使用 Laravel 8,我正在尝试同时使用用户名和电子邮件登录,但我不知道该怎么做。在 Laravel 7 中,我可以使用...

protected function credentials(Request $request)
{
    $field = filter_var($request->get($this->username()), FILTER_VALIDATE_EMAIL)
        ? $this->username()
        : 'username';
    
    return [
        $field => $request->get($this->username()),
        'password' => $request->password,
    ];
}

LoginController由于文件夹内不再存在,如何在 Laravel 8 中同时使用用户名和密码登录Auth

标签: phplaravellaravel-8

解决方案


适用于 Laravel-Jetstream 的解决方案

username or email您可以按照以下步骤进行身份验证。

1.确认登录输入字段名称(Let name is identity

2.改变config/fortify.php

'username' => 'email' to  'username' => 'identity'

3.在boot方法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;

#用于注册用户名

1.在你的添加输入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>

2.添加username用户模型$fillable数组列表。

3.最后修改app/Actions/Fortify/CreateNewUser.php文件

Validator::make($input, [
            ..........
            'username' => ['required', 'string', 'max:255', 'unique:users'],
            .........
        ])->validate();

        return User::create([
           .......
            'username' => $input['username'],
            .....
        ]);
    }

让我们享受认证。


推荐阅读