首页 > 解决方案 > 类型错误:传递给 Illuminate\Auth\SessionGuard::login() 的参数 1 必须实现接口 Illuminate\Contracts\Auth\Authenticatable

问题描述

我有下面的控制器,允许用户使用 laravel auth 系统登录,也可以使用社交名流登录 facebook。

但是,当用户单击“使用 facebook 登录”按钮时,会出现以下错误:

Type error: Argument 1 passed to Illuminate\Auth\SessionGuard::login() must implement interface Illuminate\Contracts\Auth\Authenticatable, string given, called in AuthManager.php on line 292.

用户存储在数据库中,但出现该错误。你知道为什么吗?

你知道为什么吗?

class OauthController extends Controller
{

    public function redirectToProvider($provider)
    {
        return Socialite::driver($provider)->redirect();

    }


    public function handleProviderCallback($provider)
    {
        $userFace = Socialite::driver($provider)->user();
        // $user->token;

        $findUser = User::where('email', $userFace->email)->first();

        if($findUser){
            Auth::login($findUser);
        }else{
            $user = new User;
            $user->name = $userFace->name;
            $user->surname = "";
            $user->email = $userFace->email;
            $user->password = bcrypt($user->name);
            $user->save();
            Auth::login($userFace->email);
        }
    }
}

授权控制器:

class AuthController extends Controller
{
    public function login(){


        if(\Input::has('code')){

        }


        return \Socialite::with('facebook')->redirect();
    }
}

登录控制器:

class LoginController extends Controller
{

    use AuthenticatesUsers;

    protected $redirectTo = '/';

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

    protected function redirectTo()
    {
        if(Route::getRoutes()->match(Request::create(\URL::previous()))->getName() == "cong.reg") {
            return (Request::create(\URL::previous())->getRequestUri());
        }
        return $this->redirectTo;
    }


}

标签: phplaravel

解决方案


尝试

$user = new User;
$user->name = $userFace->name;
$user->surname = "";
$user->email = $userFace->email;
$user->password = bcrypt($user->name);
$user->save();
Auth::login($userFace);

推荐阅读