繁体   English   中英

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

[英]Argument 1 passed to SessionGuard::login() must be an instance of Auth\Authenticatable in Laravel 5.2

我正在使用Laravel 5.2。

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

我也在检查用户是否要对用户名使用保留的Slug,如果是,则抛出错误,如果用户名正确,则将其保存在数据库中。

我正在检查2个保留的子弹bannerimage -这就是我保留的全部。

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

但是,当我应用支票时,出现此错误

SessionGuard.php第439行中的ErrorException:

传递给Illuminate \\ Auth \\ SessionGuard :: login()的参数1必须是Illuminate \\ Contracts \\ Auth \\ Authenticatable的实例,已给出字符串,在C:\\ xampp \\ htdocs \\ socialnet \\ vendor \\ laravel \\ framework \\ src \\ Illuminate中调用第63行的\\ Foundation \\ Auth \\ RegistersUsers.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"
]

那是因为您要返回一个字符串,并且该类需要一个Authenticatable实例。

您可以选择在中间件中进行验证。 创建一个中间件,检查用户名是否为“ Slug”,并且仅在验证通过后才继续使用create()方法,否则返回字符串:“用户名为保留名”

现在,您可以通过删除slugCheck方法来清理AuthController,并且始终可以确定,只要调用create()方法,该用户名就不会是Slug。

您可以查看laravel文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM