마지막 소셜 로그인을하고 그 데이터를 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)를 했을 때 나오는 값입니다.
보시면 id, nickname, name, email 등이 나오는 것을 볼 수 있습니다.
그래서 멀쩡하게 값을 받아오는데 뭐가 문제인지 몰랐습니다.
avatar 아래에 보시면 user array가 하나 더있습니다.
저걸 클릭하고 보시면 id값과 user array안에 있는 sub 값이 같습니다.
그래서 $user['id]를 $user['sub']로 바꿔주었더니 정상적으로 작동했습니다...
https://laravel.kr/docs/8.x/socialite
소셜 인증과 관련해서 더 궁금한 것이 있다면
위 공식 사이트를 참고해주세요.
'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 |
댓글