tutorial español curso advanced yii2 yii2-advanced-app yii2-user

español - Yii2 REST API BasicAuth no funciona



yii2 install (2)

Implemento HttpBasicAuth->auth en mi controlador donde adjunto HttpBasicAuth como un comportamiento como ese:

class MyController extends Controller { public function behaviors() { $behaviors = parent::behaviors(); $behaviors[''authenticator''] = [ ''class'' => HttpBasicAuth::className(), ''auth'' => [$this, ''auth''] ] return $behaviors; } public function auth($username, $password) { // Do whatever authentication on the username and password you want. // Create and return identity or return null on failure } // ... Action code ... }

Estoy implementando el módulo de Autenticación API REST como sigue el paso 1. Crear usuario por el Administrador 2. Primer timón: iniciar sesión por Autenticación básica para regresar access_token 3. Usar access_token en el paso 2 para autenticar usuario por. QueryParamAuth

como esta instrucción, funciona con QueryParamAuth https://github.com/yiisoft/yii2/blob/master/docs/guide/rest-authentication.md

Pero no funciona en el paso 2. Auth by BasicAuth Lo depuro. $this->auth siempre devuelve nulo. Aunque $username y $password correctos

class HttpBasicAuth extends AuthMethod /** * @var callable a PHP callable that will authenticate the user with the HTTP basic auth information. * The callable receives a username and a password as its parameters. It should return an identity object * that matches the username and password. Null should be returned if there is no such identity. * * The following code is a typical implementation of this callable: * * ```php * function ($username, $password) { * return /app/models/User::findOne([ * ''username'' => $username, * ''password'' => $password, * ]); * } * ``` * * If this property is not set, the username information will be considered as an access token * while the password information will be ignored. The [[/yii/web/User::loginByAccessToken()]] * method will be called to authenticate and login the user. */ public $auth; public function authenticate($user, $request, $response) { $username = $request->getAuthUser(); $password = $request->getAuthPassword(); if ($this->auth) { if ($username !== null || $password !== null) { $identity = call_user_func($this->auth, $username, $password); var_dump($identity); die(); if ($identity !== null) { $user->switchIdentity($identity); } else { $this->handleFailure($response); } return $identity; } } elseif ($username !== null) { $identity = $user->loginByAccessToken($username, get_class($this)); if ($identity === null) { $this->handleFailure($response); } return $identity; } return null; }

Mi pregunta es ¿cómo puedo implementar $ this-> auth function?


HTTP Basic Auth

// código de controlador

Modo 1 : autenticación de usuario utilizando auth-token

use yii/filters/auth/HttpBasicAuth; public function behaviors() { $behaviors = parent::behaviors(); $behaviors[''authenticator''] = [ ''class'' => HttpBasicAuth::className(), ]; return $behaviors; }

El código anterior validará al usuario mediante el token de acceso (como se menciona en el documento)

cuando la ventana solicita ingresar el nombre de usuario y la contraseña

nombre de usuario: hErEaccE55T0ken

contraseña:

Forma 2 : implementar autenticación personalizada usando nombre de usuario y contraseña , código de muestra (el código chris funciona)

estoy usando user_email, user_password

public $user_password; public function behaviors() { $behaviors = parent::behaviors(); $behaviors[''authenticator''] = [ ''class'' => HttpBasicAuth::className(), ''auth'' => [$this, ''auth''] ]; return $behaviors; } /** * Finds user by user_email and user_password * * @param string $username * @param string $password * @return static|null */ public function Auth($username, $password) { // username, password are mandatory fields if(empty($username) || empty($password)) return null; // get user using requested email $user = /app/models/User::findOne([ ''user_email'' => $username, ]); // if no record matching the requested user if(empty($user)) return null; // hashed password from user record $this->user_password = $user->user_password; // validate password $isPass = /app/models/User::validatePassword($password); // if password validation fails if(!$isPass) return null; // if user validates (both user_email, user_password are valid) return $user; }