auth()->登录名($ user)未提供所需的结果

问题描述 投票:0回答:1

我正在使用php laravel通过Facebook和Google编写登录信息。为此,我需要用户手动登录。我使用了auth()-> login($ user)。但这行不通。

LoginController函数

public function googleCallback()
    {
        try {
            $user = Socialite::driver('google')->user();

            $newUser = new User;     
            $response = $newUser->create($user);

            return redirect('/home');
        } 
        catch (\Exception $e) {
            dd($e);
            return redirect('/login');
        } 
    }

User.php

   <?php

namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Contracts\Auth\Authenticatable;

use Illuminate\Notifications\Notifiable;
use DB;
use Auth;
use Laravel\Passport\HasApiTokens;
use Spatie\Permission\Traits\HasRoles;

class User extends Model implements Authenticatable 
{
    use Notifiable, HasApiTokens, HasRoles;

    protected $fillable = [
        'name', 'email', 'password',
    ];


    protected $hidden = [
        'password', 'remember_token',
    ];

    protected $rememberTokenName = 'remember_token';

    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    public function getAuthIdentifierName() {}
    public function getAuthIdentifier(){}

    public function setRememberToken($value){}
    public function getRememberTokenName(){}

    public function getAuthPassword() {
        return $this->getAttribute('password');
    }


    public function getReminderEmail() {
        return $this->getAttribute('email');
    }


    public function getRememberToken() {
        return $this->getAttribute('remember_token');
    }

    public function create($user){

        try{
            $existingUser = User::where('email', $user->email)->first();


            if(!$existingUser){
                // create a new user
                DB::transaction(function () use($user){
                    $newUser                  = new User;
                    $newUser->name            = $user->name;
                    $newUser->email           = $user->email;

                    if(isset($user->token)){
                        $newUser->access_token    = $user->token;
                    }
                    else{
                        $newUser->access_token = $user->createToken('press_bell')->accessToken;
                    }

                    $newUser->assignRole('customer');
                    $newUser->save();
                });

                $userObj = User::find($newUser->id);
                auth()->login($userObj);
                return response()->json(["status" => 200, "data" => $newUser, "success" => "User created successfully"]);
            }
            else{
                $userObj = User::find($existingUser->id);
                auth()->login($userObj);
                return response()->json(["status" => 200, "data" => $existingUser, "success" => "User created successfully"]);
            }


        }catch(Exception $e){
            dd($e);
            return response()->json(["status" => 500, "error" => "System Error! Please try again."]);
        }

    }
}

我试图在loginController中dd(Auth :: user()),然后显示给我,enter image description here

但是如果我尝试在home.blade中dd(Auth :: user()),则显示NULL。请帮助我。

laravel authentication laravel-socialite
1个回答
0
投票

如果从Facebook或Google回调中调用create方法,则您是认证Facebook / Google服务而不是用户。

auth()->login(..)验证当前的呼叫者。

您将以用户直接调用的方法来调用auth()->login(..),例如“重定向到”页面或类似页面。

© www.soinside.com 2019 - 2024. All rights reserved.