类型错误:传递给Illuminate \ Auth \ SessionGuard :: login()的参数1必须实现接口Illuminate \ Contracts \ Auth \ Authenticatable [英] Type error: Argument 1 passed to Illuminate\Auth\SessionGuard::login() must implement interface Illuminate\Contracts\Auth\Authenticatable

查看:272
本文介绍了类型错误:传递给Illuminate \ Auth \ SessionGuard :: login()的参数1必须实现接口Illuminate \ Contracts \ Auth \ Authenticatable的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我具有以下控制器,允许用户使用laravel auth系统登录,也可以使用社交名流登录Facebook.

I have the controllers below to allow the user login with laravel auth system but also to login with facebook using socialite.

但是,当用户单击使用Facebook登录"按钮时,会出现此错误:

But when the user clicks in the button "Login with facebook" it appears this error:

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.

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

The user is stored in the database but that error appears. Do you know why?

你知道为什么吗?

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);
        }
    }
}

AuthController:

AuthController:

class AuthController extends Controller
{
    public function login(){


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

        }


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

LoginController:

LoginController:

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;
    }


}

推荐答案

尝试

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

这篇关于类型错误:传递给Illuminate \ Auth \ SessionGuard :: login()的参数1必须实现接口Illuminate \ Contracts \ Auth \ Authenticatable的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆