Yii 2 API RESTful authentifier avec HTTP de Base (Yii 2 advanced modèle)
REST API travaille sans méthodes d'authentification. Maintenant, je voulais authentifier API REST avec l'authentification HTTP de Base pour les requêtes à l'API via l'application mobile. J'ai essayé avec yii2 guide, mais il ne fonctionne pas pour moi.
essentiellement mobile de l'utilisateur nécessité de login avec nom d'utilisateur & mot de passe, si un nom d'utilisateur et mot de passe sont corrects, les utilisateurs ont besoin d'être login et le plus de demande d'API doivent être valider avec le jeton.
quand je debug findIdentityByAccessToken() la fonction $token égal nom d'utilisateur.
Facteur d'extension utilisé pour vérifier HTTP demandes de Base.
access_token champ dans la table user est vide. dois-je l'enregistrer manuellement ?
comment retourner access_token en tant que répondre?
est-il une raison pour les trois méthodes(HttpBasicAuth, HttpBearerAuth, QueryParamAuth) à la fois, pourquoi? comment?
mon dossier de l'application de la structure ressemble à ci-dessous.
api
-config
-modules
--v1
---controllers
---models
-runtime
-tests
-web
backend
common
console
environments
frontend
api\modules\v1\Module.php
namespace api\modules\v1;
class Module extends \yii\base\Module
{
public $controllerNamespace = 'api\modules\v1\controllers';
public function init()
{
parent::init();
\Yii::$app->user->enableSession = false;
}
}
api\modules\v1\controllers\CountryController.php
namespace api\modules\v1\controllers;
use Yii;
use yii\rest\ActiveController;
use common\models\LoginForm;
use common\models\User;
use yii\filters\auth\CompositeAuth;
use yii\filters\auth\HttpBasicAuth;
use yii\filters\auth\HttpBearerAuth;
use yii\filters\auth\QueryParamAuth;
class CountryController extends ActiveController
{
public $modelClass = 'api\modules\v1\models\Country';
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['authenticator'] = [
'class' => HttpBasicAuth::className(),
//'class' => CompositeAuth::className(),
//'authMethods' => [
// HttpBasicAuth::className(),
// HttpBearerAuth::className(),
// QueryParamAuth::className(),
//],
];
return $behaviors;
}
}
common\models\User.php
namespace common\models;
use Yii;
use yii\base\NotSupportedException;
use yii\behaviors\TimestampBehavior;
use yii\db\ActiveRecord;
use yii\web\IdentityInterface;
class User extends ActiveRecord implements IdentityInterface
{
const STATUS_DELETED = 0;
const STATUS_ACTIVE = 10;
public static function tableName()
{
return '{{%user}}';
}
public function behaviors()
{
return [
TimestampBehavior::className(),
];
}
public function rules()
{
return [
['status', 'default', 'value' => self::STATUS_ACTIVE],
['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]],
];
}
public static function findIdentity($id)
{
return static::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]);
}
public static function findIdentityByAccessToken($token, $type = null)
{
return static::findOne(['access_token' => $token]);
}
}
de l'utilisateur table
id
username
auth_key
password_hash
password_reset_token
email
status
created_at
access_token
access_token a été ajouté après la migration d'utilisateurs de table
OriginalL'auteur Chanuka Asanka | 2015-04-26
Vous devez vous connecter pour publier un commentaire.
Vous devez définir le jeton avant l'enregistrement de l'utilisateur. dans le Utilisateur modèle utiliser cette
maintenant vous avez une auth_key pour chaque utilisateur
pour retourner le auth_key vous devez ajouter actionLogin dans le UserController
après que, dans chaque demande d'API vous envoyer le auth_key dans l'en-tête au lieu d'envoyer un nom d'utilisateur et le mot de passe
pour vérifier si la auth_key est valable, à définir les "authentificateur" dans le UserController comportements. (n'oubliez pas d'exclure 'créer', 'login', 'resetpassword" à partir de l'authentification)
Cela m'a aidé, merci à vous, désolé moi anglais!
ce sujet de l'actualisation de jeton comment allons-nous spécifier l'expiration de jeton et puis rafraîchir si vous pouvez ajouter la partie, il serait à la base plus solide pour quiconque de mettre en œuvre à l'aide de cette réponse.
OriginalL'auteur Ahmad Yazji