繁体   English   中英

Laravel 5.7 Auth :: login($ findUser,true)返回null

[英]Laravel 5.7 Auth::login($findUser, true) returns null

我正在尝试通过laravel社交名流登录用户。 一切正常,但用户未登录!

我从Facebook得到响应,将响应保存在数据库中,然后尝试登录。

这是代码:

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Laravel\Socialite\Two\InvalidStateException;
use Auth;
use Socialite;
use App\User;
use DB;
use Log;

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

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

    if ($findUser) {
        // dd($findUser); **************** This returns information of the user who is trying to login through facebook
        // dd(Auth::login($findUser, true)); ***************** This line returns null
        if (Auth::login($findUser, true)) {
            // dd(Auth::loginUsingId($findUser->id, true));
            redirect()->route('dashboard');
        } else {
            return 'Error'; //**************** This get echoed on the screen
        }
    } else {
        $user = new User();

        $user->name = $social->name;
        $user->email = $social->email;
        $user->avatar = $social->avatar;
        $user->provider = $provider;
        $user->id = $social->id;
        $user->password = bcrypt('password');

        $user->save();
    }
    if (Auth::login($user)) {
        return redirect()->intended('/home');
    } else {
        return 'Error';
    }
}

注册或登录均无效。

login()方法不会返回任何内容,因此, if (Auth::login($findUser, true))永远不会通过。

另外,可能值得使用firstOrCreate()使您的方法更小:

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

    User::unguard();

    $user = User::firstOrCreate([
        'email' => $social->email,
    ], [
        'id'       => $social->id,
        'name'     => $social->name,
        'avatar'   => $social->avatar,
        'provider' => $provider,
        'password' => bcrypt('password'),
    ]);

    auth()->login($user, true);

    return redirect()->intended('/home');
}

如果要检查用户是否已登录,则可以使用auth()->id()方法检索当前经过身份验证的用户的ID,然后将其与$user->id进行比较:

if (auth()->id() !== $user->id) {
    return 'Error';
}

显然,如果您更喜欢使用Auth Facade而不是auth() helper函数,则可以使用Auth::id()代替auth()->id()

暂无
暂无

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

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