2017-05-23 8 views
0

のためのトークンを要求するトークン要求を検証し、このtutorialJWT認証 - トラブル、私は私のcakephp3のREST APIにJWT認証を追加しようとしています新しく登録されたユーザー

私がいるトラブルを、次のを持って、私が作成した後に/私のUsersController.phpファイル内のアクションを登録し、新しいユーザーを登録しました。 (私は作っているAppのタイプのために、 'Artists'という言葉を 'Users'という言葉に変更しました)。だから、新しいアーティスト(ユーザー)を登録して、私はそれが成功したと言って、そのアーティスト(ユーザー)のための私の "トークン"を与えるというステータスコードが表示されます201。私はそれをhttp://jwt.io/にブラウズし、それにトークンを貼り付けることでこれを確認しました。これも成功として私に戻ってきました。私は現在、ArtistsController.phpファイルにJWTトークンリクエストを実装しようとしていますが、JSONがトークンを要求してアーティストの(ユーザーの)メールアドレスとパスワードを投稿しています。ここでArtistsController.phpのための私のコードは次のとおりです。それをCocoaRestClient

<?php 
namespace App\Controller\Api; 
use App\Controller\Api\AppController; 
use Cake\Event\Event; 
use Cake\Network\Exception\UnauthorizedException; 
use Cake\Utility\Security; 
use Firebase\JWT\JWT; 

class ArtistsController extends AppController 
{ 
    public function initialize() 
    { 
     parent::initialize(); 
     $this->Auth->allow(['add', 'token']); 
    } 

    //Artists registration 
    public function add() 
    { 
     $this->Crud->on('afterSave', function(Event $event) { 
      if ($event->subject->created) { 
       $this->set('data', [ 
        'id' => $event->subject->entity->id, 
        'token' => JWT::encode(
         [ 
          'sub' => $event->subject->entity->id, 
          'exp' => time() + 604800 
         ], 
        Security::salt()) 
       ]); 
       $this->Crud->action()->config('serialize.data', 'data'); 
      } 
     }); 
     return $this->Crud->execute(); 
    } 

    //Verify Token request 
    public function token() 
    { 
     $artist = $this->Auth->identify(); 
     if (!$artist) { 
      throw new UnauthorizedException('Invalid email or password'); 
     } 
     $this->set([ 
      'success' => true, 
      'data' => [ 
       'token' => JWT::encode([ 
        'sub' => $artist['id'], 
        'exp' => time() + 604800 
       ], 
       Security::salt()) 
      ], 
      '_serialize' => ['success', 'data'] 
     ]); 
    } 

    public $paginate = [ 
     'page' => 1, 
     'limit' => 500, 
     'maxLimit' => 500, 
     'contain' => ['Parlours', 'Tags'] 
    ]; 
} 

私はその後、私のAPIにJSONデータを掲載、新しく作成されたアーティスト(ユーザー)のためにトークンを要求することにより、設定を確認しようとすると、APIテストツールを使用して表示:

資格情報は有効で正しいものの、私は、私のデータベースとコードのすべてをダブルチェックとトリプルチェックして、APIテストツールでコンマのような小さなものを残さないようにしました。私は確かに新しいアーティスト(ユーザー)を登録しました。トークンが作成され、検証されている場合でも、トークンを要求しようとする前にすべて成功しました。

誰もがこの問題を抱えていますか?

電子メールとパスワードが有効なので理論的にはうまくいくはずですが、単純にはそうではありません。

+0

@RogarSSDに関してAppController.phpに認証コンポーネントの構成を変更した、この質問https://stackoverflow.com/に答えるために私を助けてください質問/ 47995364/how-can-we-save-registration-data-in-two-tables-with-jwt-authentication-in-cakep –

答えて

0

あなたはアーティストモデル、すなわち「userModel」=> '芸術家

+0

これは機能します!有難うございます。私はこれについて長い間、私の髪をリッピングしてきました!あなたはスターです! – Sebastian

+0

@Sebastianお手伝いをさせていただきます。この回答または他の誰かがあなたの問題を解決した場合は、それを合格とマークしてください。ありがとうございました。 – RogerSSD

関連する問題