본문 바로가기
IT/PHP

Laravel - 구글 소셜 로그인(4)

by Sungjun_ 2020. 12. 13.

마지막 소셜 로그인을하고 그 데이터를 DB에 저장시켜보겠습니다.

 

database >> migration >> users_table.php 파일을 열어주고

 

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->string('google_id');
            $table->rememberToken();
            $table->timestamps();
});
}

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

 

이렇게 작성한 후에

터미널에 php artisan migrate를 해줍니다. (오류가 발생하시면 .env 파일에서 DB부분을 확인해주세요.)

 

그리고 LoginController.php 파일을 열어줍니다.

 

<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Laravel\Socialite\Facades\Socialite;

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

    public function handleProviderCallback(){
        try{
            $user = Socialite::driver('google') -> user();
            $findUser = User::where('google_id', $user->id) -> first();
            if($findUser){
                Auth::login($findUser);
                return redirect() -> route('main');
            }else{
                $newUser = User::create([
                    'name' => $user['name'],
                    'email' => $user['email'],
                    'google_id' => $user['sub'],
                ]);
                Auth::login($newUser);
                return redirect() -> route('main');
            }

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

    public function logout(){
        Auth::logout();
        return redirect() -> route('main');
    }
}

 

$findUser는 이미 가입된 아이디이면 로그인 시키는 부분이고

$newUser 부분이 DB에 저장하고 로그인하는 부분입니다.

 

소셜 로그인을 진행하고 DB를 확인해보시면 저장된 것을 확인 할 수 있습니다.

 


소셜 로그인 구현에서 난관이었던 부분이 마지막 로그인과 DB 저장 부분이었습니다.

 

dd($user)를 코드에 넣어주시면 $user안에 들어가있는 값을을 볼 수있습니다.

그 중 google_id에 넣는 부분을 $user['id]로 받았는데 id 값을 계속 못받아왔었습니다.

 

dd($user)

위 사진이 dd($user)를 했을 때 나오는 값입니다.

보시면 id, nickname, name, email 등이 나오는 것을 볼 수 있습니다.

그래서 멀쩡하게 값을 받아오는데 뭐가 문제인지 몰랐습니다.

 

dd($user)

avatar 아래에 보시면 user array가 하나 더있습니다.

저걸 클릭하고 보시면 id값과 user array안에 있는 sub 값이 같습니다.

그래서 $user['id]를 $user['sub']로 바꿔주었더니 정상적으로 작동했습니다...

 

https://laravel.kr/docs/8.x/socialite

 

라라벨 8.x - Socialite-소셜로그인

라라벨 한글 메뉴얼 8.x - Socialite-소셜로그인

laravel.kr

 

소셜 인증과 관련해서 더 궁금한 것이 있다면

위 공식 사이트를 참고해주세요.

'IT > PHP' 카테고리의 다른 글

Laravel - 라우트  (0) 2020.12.30
Laravel - 회원 정보 수정  (2) 2020.12.14
Laravel - 구글 소셜 로그인(3)  (0) 2020.12.13
Laravel - 구글 소셜 로그인(2)  (0) 2020.12.13
Laravel - 구글 소셜 로그인(1)  (0) 2020.12.13

댓글