Sanctum & Socialite를 통한 Laravel 9 API 인증 및 Postman 테스트
(2022년 9월 23일 업데이트 : Flutter 앱 업데이트)
안녕하세요 여러분, 이것은 에 대한 나의 첫 번째 게시물입니다.
이 글에서는 매우 기본적인 방법으로 Laravel Sanctum with Socialite를 구현하는 방법을 보여드리겠습니다.
시작하겠습니다.
1. 새 Laravel 프로젝트를 만듭니다.
1단계: 터미널 OR 명령 프롬프트를 열고 다음 명령을 실행합니다.
composer create-project laravel/laravel test
또는 다음 명령으로:
laravel new test
2단계: 새 DB를 만든 다음
.env
파일로 이동하여 데이터베이스 세부 정보를 추가합니다.예를 들어:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db_name
DB_USERNAME=root
DB_PASSWORD=
2. Laravel Sanctum 패키지 설치:
1단계: Composer를 통해 Laravel Sanctum을 설치합니다.
composer require laravel/sanctum
2단계:
vendor:publish
Artisan 명령을 사용하여 Sanctum 구성 및 마이그레이션 파일을 게시해야 합니다.php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
3단계:
app/Http/Kernel.php
파일에서 Sanctum 미들웨어의 주석 처리를 제거합니다.'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
4단계: Laravel Socialite는 암호가 필요하지 않으므로 사용자 테이블로 이동하여
password
를 nullable()
로 설정합니다.<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class 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->timestamp('email_verified_at')->nullable();
$table->string('password')->nullable();
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
};
5단계: 이제 사용자 로그인 및 등록을 처리하기 위해 AuthController를 생성해야 합니다.
php artisan make:controller AuthController
이것은 견인 기능
register
및 login
이 있는 매우 간단한 인증 컨트롤러입니다.<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Auth;
class AuthController extends Controller
{
public function register(Request $request)
{
$validator = Validator::make($request->only('name', 'email', 'password', 'password_confirmation'), [
'name' => ['required', 'min:2', 'max:50', 'string'],
'email' => ['required', 'email', 'unique:users,email'],
'password' => ['required', 'min:6', 'max:255', 'confirmed', 'string'],
]);
if ($validator->fails())
return response()->json($validator->errors(), 400);
$input = $request->only('name', 'email', 'password');
$input['password'] = Hash::make($request['password']);
$user = User::create($input);
$data = [
'token' => $user->createToken('Sanctom+Socialite')->plainTextToken,
'user' => $user,
];
return response()->json($data, 200);
}
public function login(Request $request)
{
$validator = Validator::make($request->only('email', 'password'), [
'email' => ['required', 'email', 'exists:users,email'],
'password' => ['required', 'min:6', 'max:255', 'string'],
]);
if ($validator->fails())
return response()->json($validator->errors(), 400);
if (Auth::attempt(['email' => $request->email, 'password' => $request->password])) {
$user = $request->user();
$data = [
'token' => $user->createToken('Sanctom+Socialite')->plainTextToken,
'user' => $user,
];
return response()->json($data, 200);
}
}
}
3.Laravel Socialite 패키지 설치:
1단계: Socialite를 시작하려면 Composer 패키지 관리자를 사용하여 패키지를 프로젝트의 종속성에 추가합니다.
composer require laravel/socialite
2단계: Socialite를 사용하기 전에 애플리케이션에서 사용하는 OAuth 공급자에 대한 자격 증명을 추가해야 합니다.
'google' => [
'client_id' => env('GOOGLE_CLIENT_ID'),
'client_secret' => env('GOOGLE_CLIENT_SECRET'),
'redirect' => 'GOOGLE_REDIRECT_URI',
],
이것은 Google 토큰에 대해서만 작동한다는 것을 기억하십시오.
API를 구축하고 있으므로 소셜라이트가 작동하도록 하기 위해
config/services.php
파일에 아무 것도 설정할 필요가 없습니다.3단계: 정리된 상태를 유지하려면 공급자를 통한 로그인을 처리할 새 컨트롤러가 필요하므로 다음과 같이 생성합니다.
.env
이제 우리는 로그인을 처리하기 위한 견인 기능
php artisan make:controller SocialiteController
과 사용된 공급자를 확인하기 위한 기능handleProviderCallback
을 만들어야 합니다.<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Laravel\Socialite\Facades\Socialite;
use Illuminate\Support\Facades\Validator;
class SocialiteController extends Controller
{
public function handleProviderCallback(Request $request)
{
$validator = Validator::make($request->only('provider', 'access_provider_token'), [
'provider' => ['required', 'string'],
'access_provider_token' => ['required', 'string']
]);
if ($validator->fails())
return response()->json($validator->errors(), 400);
$provider = $request->provider;
$validated = $this->validateProvider($provider);
if (!is_null($validated))
return $validated;
$providerUser = Socialite::driver($provider)->userFromToken($request->access_provider_token);
$user = User::firstOrCreate(
[
'email' => $providerUser->getEmail()
],
[
'name' => $providerUser->getName(),
]
);
$data = [
'token' => $user->createToken('Sanctom+Socialite')->plainTextToken,
'user' => $user,
];
return response()->json($data, 200);
}
protected function validateProvider($provider)
{
if (!in_array($provider, ['google'])) {
return response()->json(["message" => 'You can only login via google account'], 400);
}
}
}
4단계: 이제 API 경로를 만들어야 하므로
validateProvider
로 이동하여 다음 경로를 추가합니다.use App\Http\Controllers\AuthController;
use App\Http\Controllers\SocialiteController;
Route::controller(AuthController::class)->group(function () {
Route::post('/', 'register');
Route::post('/login', 'login');
});
Route::post('/login/callback', [SocialiteController::class, 'handleProviderCallback']);
5단계: 실행:
routes/api.php
그리고 :php artisan migrate
이제 코드를 완료했으므로 우편 배달부로 이동하여 경로를 테스트해 보겠습니다.
일반 등록 및 로그인 테스트:
등록하다:
소셜라이트를 통해:
이제 access_provider_token을 얻는 방법이 궁금할 수 있습니다. 저는 이 토큰을 얻기 위해 친구가 만든 Flutter 애플리케이션을 사용하고 있습니다.
Flutter 앱의 일부 이미지:
다음은 Google 토큰입니다.
HERE에서 앱을 다운로드할 수 있습니다.
php artisan serv
의 dd
에서 $providerUser
에 의해 Google 토큰으로 제공되는 모든 사용자 정보를 볼 수 있습니다.이 프로젝트의 소스 코드는 github에서 얻을 수 있습니다.
끝으로 이 글이 여러분에게 유용하고 도움이 되기를 바라며, 이는 글이 너무 길지 않도록 아주 단순한 형태의 코드일 뿐이라는 점을 기억해두시기 바랍니다.
Providers Table), Laravel Socialite에 등록된 각 사용자를 이 테이블에 연결하고 사용자 Provider 및 기타 세부 정보를 기록하고 자신의 손길을 잊지 마십시오.
질문이 있으시면 이 게시물에 자유롭게 댓글을 달아주세요.
Reference
이 문제에 관하여(Sanctum & Socialite를 통한 Laravel 9 API 인증 및 Postman 테스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/philipdroubi/laravel-9-api-authentication-via-sanctum-socialite-and-test-on-postman-2iki텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)