欢迎光临
我们一直在努力

laravel用户密码字段不使用password的方法以及添加用户验证

使用laravel框架,开发过程中遇到一个坑,使用

$res = Auth::attempt(['user_login' => $userlogin, 'password' => $userpass]);

的时候一直验证不过去,各种方法各种过不去,各种坑,后来吧我的数据库密码字段 user_pass 改成password之后就通过了,我了个大C,原来laravel会限制数据库密码字段的名称。

有些情况下是不能轻易修改数据库字段的,那么该怎么处理这个地方呢。不能修改框架源码吧,改框架源码是一条不归路不可取。所以网上搜索了一些然后放在这里作为记录。就是在User的model里面添加一个方法来重置laravel默认的方法。就是这个

public function getAuthPassword()
{
    //return $this->attributes['user_pass'];
    return $this->user_pass;   //或其它名称,以上两种写法都OK
}

还有就是后台使用了laravel默认的用户验证方式,那么前台怎么验证呢?答案是照抄一下写个新的验证。下面是步骤:

第一步:打开 /config/auth.php 配置文件。laravel6.18.* 在第38行 guards 这里添加 一个新的member成员,member照抄web就是了 provider 名字可以自己起,后面用得到。

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
        'hash' => false,
    ],

    'member' => [
        'driver' => 'session',
        'provider' => 'member',
    ]
],

第二步:添加完guards之后继续修改后面的配置信息。这个member成员就是前面自己在guards给新成员起的provider里面的名字。model就是复制照抄users。

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    'member' => [
        'driver' => 'eloquent',
        'model' => App\Member::class,
    ],
],

第三步:新建Member.php 这个模型文件,位置在 /app/Member.php 内容照抄 /app/User.php

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class Member extends Authenticatable
{
    use Notifiable;
    //
    protected $table = "users";

    protected $fillable = [
        'user_login', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function getAuthPassword()
    {
        //return $this->attributes['password2'];
        return $this->user_pass;   //或其它名称,以上两种写法都OK
    }
}

第四部:然后就可以像laravel验证那样优雅的使用啦,接下来就是中间件的一些列操作。

第五步:使用。像这样

$res = Auth::guard('member')->attempt(['user_login' => $user_login, 'password' => $user_pass]);

在Auth后面指定guard就可以了,因为默认(不写)的guard(“web”)已经被前面占用了。

好啦,优雅起来吧。。。。

赞(0)
版权归原作者所有,如有侵权请告知。达维营-前端网 » laravel用户密码字段不使用password的方法以及添加用户验证

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址