Laravel Auth :: guard('employee')->尝试不起作用

时间:2019-05-27 21:59:25

标签: php laravel authentication guard

对于我的网站,我希望有2位警卫:员工和客户。登录或注册时,总得到302。登录员工时:

Auth::guard('employee')->attempt(['username' => $request->username, 'password' => $request->password])

我弄错了。我检查了$ request,值正确。当我在没有警卫的情况下做同样的事情时,我收到一个错误,他无法在用户中找到用户名。因此,他使用后卫在右列中进行搜索,但仍然没有找到该列。用户名和密码的值在数据库中。但是,当我为它播种时,它没有被散列,因为我只是一个学生,而且都在测试环境中。可能有问题吗?我没有在此处发布中间件以及所有这些东西,因为当我执行上面的行代码的dd()时,我得到了“ false”,那么是否存在尝试或真正需要中间件这一行代码的问题? / p>

我的员工模型如下:

class Employee extends Authenticatable {

use Notifiable;

protected $guard = 'employee';

protected $fillable = [
    'name', 'username', 'password',
];

protected $hidden = [
    'password', 'remember_token',
]; }

auth.php(简短版本)

'guards' => [
    'employee' => [
        'driver' => 'session',
        'provider' => 'employees',
    ],
    'customer' => [
        'driver' => 'session',
        'provider' => 'customers',
    ]
],
 'providers' => [
    'employees' => [
        'driver' => 'eloquent',
        'model' => App\Employee::class,
    ],
    'customers' => [
        'driver' => 'eloquent',
        'model' => App\Customer::class,
    ],

我的loginController

public function __construct()
{
    $this->middleware('guest')->except('logout');
    $this->middleware('guest:employee')->except('logout');
    $this->middleware('guest:customer')->except('logout');
}

public function adminLogin(Request $request)
{
    $this->validate($request, [
        'username' => 'required',
        'password' => 'required|min:6'
    ]);  

    if (Auth::guard('employee')->attempt(['username' => $request->username, 'password' => $request->password])) {
        return redirect()->intended('/employee/overview');
    }

    return back()->withInput($request->only('username'));
}

我知道这个问题被问了很多,但是我搜索了很多却没有找到解决方案,并问了我的网络老师,但他也没有找到问题。我也许可以使用某些角色,但我发现自己愚蠢到无法做到。我只想学习正确使用警卫。

提前谢谢!

3 个答案:

答案 0 :(得分:1)

问题是您的密码必须在日期库中散列

使用功能

$password=bcrypt($request['password']);

Hash::make($data['password'])

答案 1 :(得分:0)

在登录控制器中,按如下所示更改您的代码:

public function adminLogin(Request $request)
{
    $this->validate($request, [
        'username' => 'required',
        'password' => 'required|min:6'
    ]);  

    if (Auth::guard('employee')->attempt(['username' => $request->input('username'), 'password' => $request->input('password')])) {
        return redirect()->intended('/employee/overview');
    }

    return back()->withInput($request->only('username'));
}

答案 2 :(得分:0)

尝试函数,查找哈希密码。它需要输入密码,对其进行哈希处理,然后将其与数据库中的密码进行比较。所以当你在数据库中保存数据时,确保你这样做:

$user->password = Hash::make($request->password);
$user->save();