2015-03-02 19 views
6

Sosyalite paketini projeme uygulamaya çalışıyorum. İşte iyi çalışan kodum. Ancak, kullanıcı oturumu kapatmaya çalışırsa, veritabanında yinelenen giriş yapar. Ayrıca kullanıcının genel adını $ userData-> adıyla alamıyorum. Null değerini döndürür.Laravel Socialite Google Kayıt ve Giriş

Denetleyicim;

namespace App\Http\Controllers; 

use App\AuthenticateUser; 
use App\AuthenticateUserListener; 
use App\Http\Requests; 
use Illuminate\Http\Request; 

class SocialLoginsController extends Controller implements 
AuthenticateUserListener 
{ 
/** 
* @param AuthenticateUser $authenticateUser 
* @param Request $request 
* @return \Symfony\Component\HttpFoundation\RedirectResponse 
*/ 
public function socialLogin(AuthenticateUser $authenticateUser, Request $request) 
{ 
    $hasCode = $request->has('code'); 
    return $authenticateUser->execute($hasCode, $this); 
} 


/** 
* When a user has successfully been logged in... 
* 
* @param $user 
* @return \Illuminate\Routing\Redirector 
*/ 
public function userHasLoggedIn($user) 
{ 
    return redirect('student'); 
} 

Kullanıcı havuzum;

namespace App\Repositories; 
use App\User; 


class UserRepository { 


public function findByUsernameOrCreate($userData) 
{ 

    return User::firstOrCreate([ 
     'username' => $userData->name, 
     'email' => $userData->email, 

    ]); 

} 
} 

Kullanıcı Sınıfının Kimlik Doğrulaması; Burada ne var senin UserRepository içinde findByUsernameOrCreate yöntemi modifiye ettik hariç

<?php namespace App; 
use Illuminate\Contracts\Auth\Guard; 
use App\Repositories\UserRepository; 
use Laravel\Socialite\Contracts\Factory as Socialite; 
class AuthenticateUser { 
/** 
* @var UserRepository 
*/ 
private $users; 
/** 
* @var Socialite 
*/ 
private $socialite; 
/** 
* @var Guard 
*/ 
private $auth; 
/** 
* @param UserRepository $users 
* @param Socialite $socialite 
* @param Guard $auth 
*/ 
public function __construct(UserRepository $users, Socialite $socialite, Guard $auth) 
{ 
    $this->users = $users; 
    $this->socialite = $socialite; 
    $this->auth = $auth; 
} 
/** 
* @param boolean $hasCode 
* @param AuthenticateUserListener $listener 
* @return \Symfony\Component\HttpFoundation\RedirectResponse 
*/ 
public function execute($hasCode, AuthenticateUserListener $listener) 
{ 
    if (! $hasCode) return $this->getAuthorizationFirst(); 

    elseif($hasCode) { 
     $user = $this->users->findByUsernameOrCreate($this->getGoogleUser()); 
     $this->auth->login($user, true); 
     return $listener->userHasLoggedIn($user); 
    } 
} 



/** 
* @return \Symfony\Component\HttpFoundation\RedirectResponse 
*/ 
private function getAuthorizationFirst() 
{ 
    return $this->socialite->driver('google')->redirect(); 
} 


/** 
* @return \Laravel\Socialite\Contracts\User 
*/ 
private function getGoogleUser() 
{ 
    return $this->socialite->driver('google')->user(); 

} 



} 

cevap

1

Ben, çok benzer bir kod kullanarak bu çalışma alabilirsiniz oldum. Şöyle bir syncUserDetails yöntemi yarattı:

private function userRecordExists($userData) 
{ 
    return $this->user->where('email', $userData->email)->first(); 
} 

ve eğer öyleyse, o zaman onu eşleşen: Bir kullanıcı eşleşen bir e-posta ile db zaten varsa

public function syncUserDetails($userData) 
{ 
    if ($user = $this->userRecordExists($userData)) 
    { 
     $user->token = $userData->token; 
     $user->google_id = $userData->id; 
     $user->name = $userData->name; 
     $user->avatar = $userData->avatar; 
     $user->first_name = $userData->user['name']['givenName']; 
     $user->last_name = $userData->user['name']['familyName']; 
     $user->save(); 

     return $user; 
    } 

    return $this->user->firstOrCreate([ 
     'email'  => $userData->email, 
     'token'  => $userData->token, 
     'google_id' => $userData->id, 
     'name'  => $userData->name, 
     'avatar'  => $userData->avatar, 
     'first_name' => $userData->user['name']['givenName'], 
     'last_name' => $userData->user['name']['familyName'] 
    ]); 
} 

Kontrol edildi yeni veri ve bir kullanıcı döndürür.

Bu yardımcı olur umarız!

İlgili konular