2017-04-02 2 views
1

Laravel에서 socialite를 사용하여 Google 로그인을 설정하려고합니다. 나는 구글 자격 증명을 입력 할 때, 그것은 보여줍니다socialite Google 로그인이 "페이지가 올바르게 리디렉션되지 않음"을 보여줍니다.

을 페이지의 URL을 http://127.0.0.1:8000/redirect/google 제대로

리디렉션되지 않습니다.

내 web.php은 다음과 같습니다

Route::get('/redirect/google', '[email protected]'); 
Route::get('/callback/google', '[email protected]'); 

services.php :

'google' => [ 
    'client_id' => '-----.apps.googleusercontent.com', 
    'client_secret' => '---------', 
    'redirect' => 'http://127.0.0.1:8000/callback/google' 
], 

SocialAuthController.php :

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\SocialAccountService; 
use Socialite; 

class SocialAuthController extends Controller { 
    // 
    public function redirect(){ 
     return Socialite::driver('google')->redirect(); 
    } 

    public function callback(SocialAccountService $service) { 
     $user = $service->createOrGetUser(Socialite::driver('google')->user()); 
     auth()->login($user); 
     return redirect()->back(); 
    } 
} 

SocialAccount.php :

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class SocialAccount extends Model { 
    // 
    protected $fillable = ['user_id', 'provider_user_id', 'provider']; 

    public function user() { 
     return $this->belongsTo(User::class); 
    } 
} 

SocialAccountService.php social_accounts_table

class CreateSocialAccountsTable extends Migration { 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() { 
     Schema::create('social_accounts', function (Blueprint $table) { 
      $table->increments('user_id'); 
      $table->string('provider_user_id'); 
      $table->string('provider'); 
      $table->timestamps(); 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() { 
     Schema::dropIfExists('social_accounts'); 
    } 
} 

에 대한 마이그레이션 당신의 서비스에

namespace App; 

use Laravel\Socialite\Contracts\User as ProviderUser; 

class SocialAccountService { 
    public function createOrGetUser(ProviderUser $providerUser) { 
     $account = SocialAccount::whereProvider('google') 
      ->whereProviderUserId($providerUser->getId()) 
      ->first(); 

     if ($account) { 
      return $account->user; 
     } else { 
      $account = new SocialAccount([ 
       'provider_user_id' => $providerUser->getId(), 
       'provider' => 'google' 
      ]); 

      $user = User::whereEmail($providerUser->getEmail())->first(); 

      if (!$user) { 
       $user = User::create([ 
        'email' => $providerUser->getEmail(), 
        'name' => $providerUser->getName(), 
        'role' => 'user', 
        'password' => '', 
       ]); 
      } 

      $account->user()->associate($user); 
      $account->save(); 
      return $user; 
     } 

    } 
} 
+0

사회자가 작동하지 않음 로컬 – C2486

답변

0

, 당신은

'redirect' => 'http://127.0.0.1:8000/callback/google' 

인증 후 Google은 귀하의 도메인 http://127.0.0.1 (로컬 호스트)에 액세스 할 수 없습니다. 제작 URL로 시도해야합니다

0

이 문제를 해결했습니다. 문제는 콜백 함수에서 redirect() -> back() 호출입니다. 원본 소스 페이지로 리디렉션하는 방법을 찾아야하지만 집으로 리디렉션하면이 문제가 해결되었습니다.