当前位置: 首页 > 知识库问答 >
问题:

传递给SessionGuard::login()的参数1必须是Laravel 5.2中Authenticatable的实例

栾昂雄
2023-03-14

我使用的是Laravel5.2。

我在users表中添加了一个名为username的新字段,并将其包含在视图和AuthController.php

我还做了一个检查,看看用户是否将使用一个保留的slug作为他的用户名,如果是,我抛出一个错误,如果用户名是好的,我保存在数据库中。

我正在检查2个保留的段塞横幅图像-这就是我保留的全部。

如果我取消检查,数据将正常保存在数据库中,包括保留的slug。所以我必须做检查。

然而,当我应用检查时,我得到了这个错误

SessionGuard.php第439行中的ErrorException:

传递给Illumb\Auth\SessionGuard::login()的参数1必须是Illumb\Contracts\Auth\Authenticatable的实例,给定字符串,在第63行的C:\xampp\htdocs\socialnet\vendor\laravel\framework\src\Illumb\Foundation\Auth\RegisterUsers.php中调用并定义

这是我修改后在AuthController中的代码

protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => 'required|max:255',
        'email' => 'required|email|max:255|unique:users',
        'password' => 'required|min:6|confirmed',
        'username' => 'required|alpha_num|unique:users,username',
    ]);
}

protected function create(array $data)
{
    $check = $this->slugCheck($data['username']);

    if($check['status'] == 'nok') {
        return 'this username is a reserved name';
    } else {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
            'username' => $data['username'],
        ]);
    }
}

public function slugCheck($slug){

    $slug = strtolower($slug);

    // is the slug in the banned words list
    //
    if(array_search($slug, array('','banner','image'))){
        return array('status' => 'nok', 'message' => 'This slug is on a list of reserved names');
    }

    $user = User::where('username', '=', $slug)->first();

    if($user){
        return array('status' => 'nok', 'message' => 'This slug is already taken');
    } else {
        return array('status' => 'ok', 'message' => 'Slug is unique');
    }

}

如果我在声明$check变量并选择保留名称后dd($check),我会得到正确的响应。

array:2 [▼
  "status" => "nok"
  "message" => "This slug is on a list of reserved names"
]

共有1个答案

刘选
2023-03-14

这是因为您正在返回一个字符串,而该类需要Authenticatable的实例

在中间件中移动验证是您的选择。创建一个中间件,用于检查用户名是否为“Slug”,并且只有在验证通过时才执行procede to Create()方法。否则,返回字符串:“用户名是保留名称”

现在,您可以通过删除strgcheck方法来清理AuthController,并且您可以始终确保每当调用create()方法时,该用户名都不是Slug。

你可以检查Laravel留档

 类似资料: