我正在使用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()),然后显示给我,
但是如果我尝试在home.blade中dd(Auth :: user()),则显示NULL。请帮助我。
如果从Facebook或Google回调中调用create
方法,则您是认证Facebook / Google服务而不是用户。
auth()->login(..)
验证当前的呼叫者。
您将以用户直接调用的方法来调用auth()->login(..)
,例如“重定向到”页面或类似页面。