2016-03-31 1 views
1

Pour mon repos api J'utilise yii\rest\Controlleryii2: dans le repos api Authentification (yu repos Controller)

class TweetController extends Controller 
{ 

    public function behaviors() 
    { 
     $behaviors = parent::behaviors(); 
     $behaviors['authenticator'] = [ 
      'class' => HttpBasicAuth::className(), 
      'auth' => [$this, 'auth'] 
     ]; 
     $behaviors['contentNegotiator'] = [ 
      'class' => ContentNegotiator::className(), 
      'formats' => [ 
       'application\json' => Response::FORMAT_JSON, 
      ] 
     ]; 
     return $behaviors; 
    } 

    // not solved yet 
    public function auth($pass) 
    {} 

    /** 
    * @param int $count 
    * 
    * @return array 
    * @throws \yii\base\InvalidConfigException 
    */ 
    public function actionLastTweets($count = 10) 
    { 
     /** 
     * @var TweetLastfinder $tweetLastFinder 
     */ 
     $tweetLastFinder = Yii::$app->get('tweetlastfinder'); 

     return $tweetLastFinder->findLastTweets($count); 
    } 

J'utilise aussi prettyUrls 'GET tweet/last-tweets/<count>' => 'tweet/last-tweets'

actionLastTweets return array que l'on convertit en JSON.

L'idée est faite simplement authentification. Dans docs est un exemple comment implémenter IdentityInterface dans le modèle. Mais je ne travaille pas directement avec AR. Tel que je le comprend. J'ai besoin d'écrire correctement la méthode auth().

Je ne comprends pas, dont la valeur devrait être retournée par auth() quand l'authentification est passée? Et comment cela sera envoyé sur demande? (Je veux dire http://localhost/index.php/tweet/last-tweets/50 sans authentification, comment il changer?)

Par souci de simplicité, il est une valeur de chaîne $ password = « azerty » et je veux vérifier si le paramètre $ passe égal mot de passe $ - l'authentification passée

un peu un peu :

public function auth($pass) 
{ 
    $password = 'qwerty'; 
    if ($pass == $password) { 
     authentication passed 
    } else { 
     authentication failed 
    } 
} 
+0

qui est pas sécurisé par Ce faisant, vous jetez tous les systèmes de sécurité intégrés de yii. HttpBasicAuth est à propos de tokens.and il existe une méthode implémentée 'findIdentityByAccessToken' dans la classe d'utilisateurs que votre application utilise pour effectuer cette vérification. vérifier cette [question SO] (http://stackoverflow.com/questions/29567658/yii2-rest-simplify-basicauth). –

+0

Merci. Mais je ne comprends toujours pas comment, nom d'utilisateur et mot de passe seront transférés en url? – user199588

+0

l'idée est de ne pas les envoyer. Une seule fois, générez alors un jeton qui les remplace. la vérité est que je ne sais pas comment HttpBasicAuth fonctionne comme je ne l'ai jamais implémenté auparavant mais je sais que ce n'est pas assez sûr et ne devrait être utilisé que si le consommateur API est un programme fonctionnant sur un server.as mentionné dans [docs] (http://www.yiiframework.com/doc-2.0/guide-rest-authentication.html). vérifiez [ceci] (http: //blog.neattutorials.com/angularjs-et-yii2-part-2-authentification /) à propos de Bearer Token (oauth2) il a une belle image qui montre le cycle lors de l'utilisation de jeton au lieu de nom d'utilisateur/passe –

Répondre

0

le sujet de l'authentification est votre identité (alias utilisateur) qui doit en œuvre la funtion findIdentityByAccessToken

voir \ yu \ web \ IdentityInterface

pour essayer votre API en ligne de commande, vous pouvez utiliser cURL comme suit (le jeton: XXXXXXXX_accessTokenString_XXXXXX)

note, le « : » divise l'utilisateur du mot de passe dans le autentication de base, le jeton est utilisé comme utilisateur

POST un JSON à MessageController (la pluralisation ne constitue pas une erreur)

curl --user "XXXXXXXX_accessTokenString_XXXXXX:" -H "Accept:application/json" -H "Content-Type:application/json" -XPOST "http://rest.my-domain.com/messages" -d '{"email": "[email protected]"}' 

POST un JSON UserController permettant xdebug

curl --user "XXXXXXXX_accessTokenString_XXXXXX:" --cookie 'XDEBUG_SESSION=1221221' -H "Accept:application/json" -H "Content-Type:application/json" -XPOST "http://rest.my-domain.com/messages" -d '{"email": "[email protected]"}' 

obtenir un JSON UserController permettant xdebug

curl --user "XXXXXXXX_accessTokenString_XXXXXX:" -H "Accept:application/json" -H "Content-Type:application/json" -XGET "http://rest.my-domain.com/messages/123" 

pouvez aussi consulter le guide Yii2 pour REST http://www.yiiframework.com/doc-2.0/guide-rest-quick-start.html