Ahmed Guesmi
Ahmed Guesmi

Reputation: 370

Laravel returning null token but user is being added

I use postman to add user in my Laravel project. I get null token but the user is added, why?

{ "token": null }

How I can fix this error? I use Laravel 5.6 and this is my user model:

    <?php

    namespace App;

    use Tymon\JWTAuth\Contracts\JWTSubject;
    use Illuminate\Notifications\Notifiable;
    use Illuminate\Foundation\Auth\User as Authenticatable;
    class User extends Authenticatable
    {
        use Notifiable;

        /**
         * The attributes that are mass assignable.
         *
         * @var array
         */
        protected $fillable = [
            'name', 'email', 'password','username','lastname','tel','tel',
        ];

        /**
         * The attributes that should be hidden for arrays.
         *
         * @var array
         */
        protected $hidden = [
            'password', 'remember_token',
        ];

        public function getJWTIdentifier()
        {
            return $this->getKey();
        }

        /**
         * Return a key value array, containing any custom claims to be added to the JWT.
         *
  * @return array
         */
        public function getJWTCustomClaims()
        {
            return [];
        }
    }

and this is my register controller:

    <?php
    
    namespace App\Http\Controllers;
    use App\Http\Controllers\Controller;
    use Illuminate\Http\Request;
    use App\User;
    use JWTFactory;
    use JWTAuth;
    use Validator;
    use Response;
    
    class APIRegisterController extends Controller
    {
        //
        public function register( Request $request){
            $validator = Validator::make($request -> all(),[
             'email' => 'required|string|email|max:255|unique:users',
             'username' =>'required',
             'tel' => 'required',
             'name' => 'required',
             'lastname' => 'required',
             'adress' => 'required',
             'password'=> 'required'
            ]);
    
            if ($validator -> fails()) {
                # code...
                return response()->json($validator->errors());
    
            }
    
            User::create([
                'name' => $request->get('name'),
                'email' => $request->get('email'),
                'tel' => $request->get('tel'),
                'username' => $request->get('username'),
                'lastname' => $request->get('lastname'),
                'adress' => $request->get('adress'),
                'password'=> bcrypt($request->get('password'))
            ]);
            $user = User::first();
            $token = JWTAuth::fromUser($user);
    
            return Response::json( compact('token'));
    
    
        }
    }

I already get an error and this is my question question and I fix it.

Upvotes: 1

Views: 1387

Answers (3)

Matheus Hofstede
Matheus Hofstede

Reputation: 11

I already had a similar problem before, but I realize my$user->password holds the encrypted password, not the plain text required for login(). Change your code to call

$token = JWTAuth::fromUser($user);

with $user holding the plain text password comming from $request.

Upvotes: 1

chetan bairagi
chetan bairagi

Reputation: 11

laravel jwt auth token not recive

$token = Auth::login($user);

$token = null;

Upvotes: -1

user2127324
user2127324

Reputation: 17

I solve my problem adding if condition on register function after create user

if ($this->loginAfterSignUp) {
    $token = $this->login($request);
}
return $this->respondWithToken($token);

Upvotes: 0

Related Questions