1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

laravel sanctumで登録と同時にログイン状態にする方法

Posted at

この記事で解決したいこと

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で呼び出すようにした方がいいと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?