Laravel:如何更改默认的Auth Password字段名称

时间:2016-09-07 15:55:11

标签: php laravel laravel-5

我目前正在开展第一个laravel项目,我正面临一个问题。

如果您有使用laravel的经验,您可能知道通过调用php artisan make:auth,您将获得一个处理登录和注册的预定义机制。

这个机制设置为理解一些常用词,以便自动完成整个过程。

在我的情况下发生的问题是我使用oracle db并且它不会让我有一个名为password的表列,因为它是一个系统关键字并且它会抛出尝试插入用户时出错。

到目前为止,我已尝试将password列更改为passwd,并按照预期在我的注册表单中工作。用户行已成功插入,我的页面被重定向到/ home。 Register

Success

但是当我尝试注销然后重新登录时,我收到此错误,告诉我我的凭据不正确。 enter image description here

至于我的代码,我已更改了我的RegisterController.php,因此需要使用用户名而不是电子邮件

protected function validator(array $data)
{
    return Validator::make($data, [
        'username' => 'required|max:50|unique:ECON_USERS',
        'passwd' => 'required|min:6|confirmed',
    ]);
}

protected function create(array $data)
{
    return User::create([
        'username'   => $data['username'],
        'passwd'     => bcrypt($data['passwd'])
    ]);
}

用户$可填写

protected $fillable = [
    'username', 'passwd'
];

我猜测Auth正在尝试使用email而不是username进行身份验证,或者Auth正在搜索password而不是passwd

7 个答案:

答案 0 :(得分:20)

要让username代替email,您可以在 LoginController.php

中覆盖username()
/**
 * Get the login username to be used by the controller.
 *
 * @return string
 */
public function username()
{
    return 'username';
}

对于passwd而不是password,您可以在 App \ User.php

中定义accessor
/**
 * Get the password for the user.
 *
 * @return string
 */
public function getAuthPassword()
{
    return $this->passwd;
}

login.blade.php :将email输入替换为username更改{{1}的输入名称}。

答案 1 :(得分:2)

app/Http/Controllers/Auth/LoginController中通过添加:

覆盖默认类
/**
 * Validate the user login request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return void
 */
protected function validateLogin(Request $request)
{
    $this->validate($request, [
        $this->username() => 'required', 'passwd' => 'required',
    ]);
}

不要忘记添加use Illuminate\Http\Request;

您可能需要将此添加到LoginController

/**
     * Get the needed authorization credentials from the request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    protected function credentials(Request $request)
    {
        return $request->only($this->username(), 'passwd');
    }

应该这样做。

答案 2 :(得分:1)

使用它。这对我有用。

到目前为止,我已经更改了User.php

public function getAuthPassword(){  
    return $this->senha;
}

public function setPasswordAttribute($value)
    {
        $this->attributes['password'] = bcrypt($value);
    }

同样在LoginController.php上

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

答案 3 :(得分:0)

在上述答案旁边的Laravel 5.7中,您必须更改EloquentUserProvider类。在文件中搜索(第107,117和140行)中的“密码”单词,您发现了“密码”单词并用新名称进行了更改,这全都可以解决。

  • 在用户模型中添加此方法:
public function getAuthPassword(){
    return $this->new_password_name;
}
  • 在LoginController中添加以下内容:
protected function validateLogin(Request $request){
    $this->validate($request, [
        $this->username() => 'required',
        'new_password_name' => 'required',
    ]);
}
protected function credentials(Request $request)
{
    return $request->only($this->username(), 'new_password_name');
}
public function username()
{
    return 'new_username';//or new email name if you changed
}
  • 在login.blade.php中更改HTML元素的ID和名称。
  • validateCredentialsretrieveByCredentials函数内部的EloquentUserProvider类中,用新名称更改“密码”单词。

编辑:我更改了EloquentUserProvider类,但是如果您认为更改laravel类是一种不好的做法,则可以创建自定义提供程序并覆盖retrieveByCredentialsvalidateCredentials自定义提供程序中的功能。

答案 4 :(得分:0)

如果使用最新版本。我像下面的代码一样针对自定义密码字段返回它。最后,我正在使用Lumen 6.x,尽管它也适用于当前版本的Laravel。

/**
 * Get the custom password field for the user.
 *
 * @return string
 */
public function getAuthPassword()
{
    return $this->custom_password_field_here;
}

答案 5 :(得分:0)

IN自定义控制器

public function login(Request $request){

    if (Auth::attempt(['email' => $request->email,'password' => $request->password], false)){

         return redirect()->intended(route('subportal.dashboard'));
    }

    return $this->sendFailedLoginResponse($request);
}

protected function validateLogin(Request $request)
{
    $this->validate($request, [
        $this->username() => 'required', 'password' => 'required',
    ]);
}

/**
 * Get the login username to be used by the controller.
 *
 * @return string
 */
public function username()
{
    return 'email';
}

在App / Users.php中

public $table = "customer";
protected $primaryKey = 'cust_id';
/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
    'name', 'pass', 'email','record_date',
];

public function getAuthPassword() {
    return $this->pass;
}

答案 6 :(得分:-1)

在您的AuthController.php(位于app / http / Controllers / Auth中)

public function postLogin(Request $request)
{
    $this->validate($request, [
                'username' => 'required',
                'password' => 'required',
    ]);

    $credentials = ($request->only('username', 'password'));
    if ($this->auth->attempt($credentials)) {
       //do something, credentials is correct!   
    }
    return "Ops! snap! seems like you provide an invalid login credentials";

}
相关问题