Payne
Payne

Reputation: 543

is it possible to create an email only authentication from existing email-password structure in Laravel

I am trying to create email only authentication. Instead of having a login, I want a situation where I will only have signup and once the email is entered, a bearer token is created. I have the signup function and login function which worked when I had password initiated but I have removed the password but I tried to move the "create token" to signup. It gives error that token is undefined.

Signup function

public function signup(Request $request)
    {
        $request->validate([
           'email' => 'required|string|email|unique:users'
        ]);
        $user = new User([
            'email' => $request->email
        ]);
        $user->save();
        return response()->json([
            'message' => 'Successfully created user!'
        ], 201);
    }

Login function

public function login(Request $request)
    {
        $request->validate([
            'email' => 'required|string|email'

        ]);
        $credentials = request(['email', '=']);
        if(!Auth::attempt($credentials))
            return response()->json([
                'message' => 'Unauthorized'
            ], 401);
        $user = $request->user();
        $tokenResult = $user->createToken('Personal Access Token');
        $token = $tokenResult->token;
        if ($request->remember_me)
            $token->expires_at = Carbon::now()->addWeeks(1);
        $token->save();
        return response()->json([
            'access_token' => $tokenResult->accessToken,
            'token_type' => 'Bearer',
            'expires_at' => Carbon::parse(
                $tokenResult->token->expires_at
            )->toDateTimeString()
        ]);
    }

Upvotes: 1

Views: 63

Answers (1)

Abdulkabir Ojulari
Abdulkabir Ojulari

Reputation: 1467

It is really simple, you have already done most of the work needed to be done here. You don't need the login function rather you need to copy the token part of the function as illustrated below

 public function signup(Request $request)
    {
        $request->validate([
           'email' => 'required|string|email|unique:users'
        ]);
        $user = new User([

            'email' => $request->email
        ]);
         $user->save();
        Auth::login($user);
        $tokenResult = $user->createToken('Personal Access Token');
        $token = $tokenResult->token;
        if ($request->remember_me)
            $token->expires_at = Carbon::now()->addWeeks(1);
        $token->save();
        return response()->json([
            'message' => 'Successfully created user!',
            'access_token' => $tokenResult->accessToken,
            'token_type' => 'Bearer',
            'expires_at' => Carbon::parse(
                $tokenResult->token->expires_at
            )->toDateTimeString()
            ], 201);


    }

Upvotes: 1

Related Questions