Laravel: 除了电子邮件和密码,我如何使用其他数据?

Laravel: How do I use other data than email and password?

我只想使用 CPF 号码登录。 CPF 就像一个社会安全号码或其他类似的号码,这在巴西是唯一的号码。 我已经有这个号码的数据table,所以不需要注册。

请问我在哪里更改代码以接受 CPF 而不是电子邮件和密码?

谢谢!

您必须在您的 LoginController 中覆盖这些方法,只需将其粘贴并进行相应更改即可。

将默认 email 更改为 cpf 字段名称:

public function username()
{
    return 'cpf'; // or whatever field you use to login
}

在此处使用凭据进行验证:

protected function validateLogin(Request $request)
{
    $request->validate([
        $this->username() => 'required|string|exists:users,cpf',
    ]);
}

执行登录请求。在这里我们寻找用户然后手动登录并将您重定向到仪表板(主页),如果失败,您将被重定向回插入表单的输入:

public function login(Request $request)
{
    $this->validateLogin($request);

    $user = User::where('cpf', $request->cpf)->first();

    if ($user) {
        Auth::login($user);
        return redirect()->intended('home');
    }

    return redirect()->back()->withInput($request->all());
}

DB table 我测试了:

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('cpf')->unique();
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->rememberToken();
    $table->timestamps();
});

第 1 步:打开文件 AuthenticatesUsers.php

第 2 步:更新 username() 功能,默认您会看到电子邮件。您需要将其更新为 cpf。

   public function username()
    {
        return 'cpf';
    }

第三步:更新credentials(Request $request)功能,默认为密码。您可以根据自己的方法进行更改。如果你不想要它,你也可以删除密码字段!

    protected function credentials(Request $request)
    {
        //return $request->only($this->username(), 'password');
        return $request->only($this->username());
    }