2017-05-18 1 views
1

En bref, je reçoit l'erreur suivante:Lumen: JWT Authentification avec aucune table des utilisateurs

{ 
    "message": "Undefined index: password", 
    "status_code": 500 
} 

Un fond liitle:

J'ai une table users, et une table pincodes, Le tableau users ont deux colonnes mobile_number, et status, j'envoie des sms au numéro de téléphone mobile dans la table des utilisateurs, Sms ont un code secret puis je sauvegarde ce code avec le user_id dans pincodes tableau. Donc l'authentification s'appliquera sur pincodes, Où j'ai user_id et code pour vérifier que l'utilisateur est authentique ou non. J'utilise le cadre micro de lumen, avec l'authentification JWT library. J'ai donc changé mon modèle Pincode en modèle identique au modèle User.

namespace App; 

use Illuminate\Auth\Authenticatable; 
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract; 
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; 
use Illuminate\Database\Eloquent\Model; 
use Laravel\Lumen\Auth\Authorizable; 

class Pincode extends Model implements 
AuthenticatableContract, 
AuthorizableContract { 
    use Authenticatable, Authorizable; 

    protected $table = 'pincodes'; 
    public function user() { 
     return $this->belongsTo('App\User'); 
    } 
} 

verify type de requête de la méthode est la poste (ci-dessous), et les params sont user_id et code. Ce que je donne correct.

Et la méthode de vérification où le jeton est censé générer:

public function verify(Request $request) { 
    $uid = $request->get('uid'); 
    $pinCode = $request->get('code'); 

    $findPinCode = \App\Pincode::where('uid', $uid)->where('code', $pinCode)->first(); 
    if (!$findPinCode) { 
     return response()->json([ 
      'message' => 'No pin Code found', 
      'code' => 404, 
     ]); 
    } 

    $findPinCode->status = 'v'; 
    $findPinCode->dateVerify = Carbon::now(); 

    $findPinCode->save(); 

    try { 

     $this->validatePostLoginRequest($request); 

    } catch (HttpResponseException $e) { 
     return $this->onBadRequest(); 
    } 

    try { 
     if (!$token = JWTAuth::attempt(
      $this->getCredentials($request) 
    )) { 
      return 'asdasd'; 
      return $this->onUnauthorized(); 
     } 
    } catch (JWTException $e) { 
     return $this->onJwtGenerationError(); 
    } 

I reçoit l'erreur suivante:

{ 
    "message": "Undefined index: password", 
    "status_code": 500 
} 

Répondre

1

Le code de base que vous utilisez fait usage du paquet tymondesigns/jwt-auth. La méthode JWTAuth::attempt utilise par défaut l'email et le mot de passe.

La façon la plus simple serait de valider manuellement par l'utilisateur du code PIN et la récupération de l'objet utilisateur et générer jeton à l'aide de l'utilisateur en utilisant JWTAuth::fromUser

$user = User::find($uid); 

try { 
    if (!$token = JWTAuth::fromUser($user)) { 
     return $this->onUnauthorized(); 
    } 
} catch (JWTException $e) { 
    return $this->onJwtGenerationError(); 
}