auth - Autenticación del portador API Yii2 Rest API
yii2 token (1)
/yii/filters/auth/HttpBearerAuth::authenticate()
simplemente llamará a /yii/web/User::loginByAccessToken()
:
$class = $this->identityClass;
$identity = $class::findIdentityByAccessToken($token, $type);
Entonces solo necesita implementar findIdentityByAccessToken()
en su clase de identidad de usuario, por ejemplo:
public static function findIdentityByAccessToken($token, $type = null)
{
return static::findOne([''auth_key'' => $token]);
}
He creado una API REST Yii2. Con la API puedes obtener una lista de autos. Ahora quiero usar la Autenticación de portador para proteger la API. Pero no sé cómo funciona.
Ante todo. Configuré el autenticador en el método de comportamientos de mi controlador.
public function behaviors(){
return [
''contentNegotiator'' => [
''class'' => ContentNegotiator::className(),
''formats'' => [
''application/json'' => Response::FORMAT_JSON,
],
],
''authenticator'' => [
''class'' => CompositeAuth::className(),
''authMethods'' => [
HttpBearerAuth::className(),
],
]
];
}
Esto funciona bien. Si voy a la URL, recibiré un mensaje de ''No autorizado''.
En mi complemento de WordPress hice una función para usar la API y establecer el encabezado con la clave de autenticación.
function getJSON($template_url) {
$authorization = "Authorization: Bearer " . get_option("auth_key");
// Create curl resource
$ch = curl_init();
// Set URL
curl_setopt($ch, CURLOPT_URL, $template_url);
// Return transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Set headers
curl_setopt($ch, CURLOPT_HTTPHEADER, array(''Content-Type: application/json'', $authorization));
// $output contains output as a string
$output = curl_exec($ch);
// Close curl resource
curl_close($ch);
return json_decode($output, true);
}
Pero ahora mi pregunta es ¿Cómo puedo verificar la API si esta clave es válida y darme la respuesta? Quiero buscar la clave en la base de datos y si existe también debería darme la identificación o el correo electrónico que está en la misma fila.
No tengo ni idea de cómo hacer esto.