この記事で解決したいこと
Laravel SanctumでSPAの登録でユーザーをDBに登録した後にログイン状態にする方法です。
参考 ・ 使用技術
この記事を参考に認証機能を作成しました。
laravel: 8.75
laravel/sanctum: 2.14
laravel/socialite: 5.5
解決する方法
登録した後、ログイン状態にする方法はないか考えた結果、DBにユーザー情報を登録した後にログイン処理をする方法がいいのではないかと思いました。
この処理でも上手くできますが、他にもっと良い方法があればお教えいただけるとありがたいです。
RegisterController.php
class RegisterController extends Controller
{
public function __construct(
private Auth $auth,
) {
}
public function register(Request $request)
{
//バリデーション
$credentials = $request->validate([
'name' => ['required', 'max:255', 'string'],
'email' => ['required', 'email', 'unique:users', 'max:255', 'string'],
'password' => ['required', 'min:8', 'string'],
]);
//DBに登録
$user = User::create([
'name' => $credentials['name'],
'email' => $credentials['email'],
'password' => Hash::make($credentials['password'])
]);
//$remember =trueとすることでログイン状態を保持できます。
if ($this->getGuard()->attempt($credentials,$remember =true)) {
$request->session()->regenerate();
}
return new JsonResponse(['user' => $user, 'message' => '登録に成功しました']);
}
private function getGuard(): StatefulGuard
{
return $this->auth->guard(config('auth.defaults.guard'));
}
改善点
LoginContorollerと全く同じコードを書いてしまっているのでDRY原則に違反するのでLoginControllerのメソッドをRegisterControllerで呼び出すようにした方がいいと思います。