Задать вопрос
webinar
@webinar
Учим yii: https://youtu.be/-WRMlGHLgRg

Что не так с Yii2 rest api авторизацией?

Решил поиграться с REST, в большей степени разобрался, но застрял с авторизацией. Вроде бы принцип понял, но видимо не правильно.
Вот контроллер:
<?php
namespace frontend\controllers;

use yii;
use yii\rest\Controller;
use yii\filters\auth\QueryParamAuth;

class QuestionController extends Controller
{

  public function behaviors()
  {
    $behaviors = parent::behaviors();
    $behaviors['authenticator']['class'] = QueryParamAuth::className();
    $behaviors['authenticator']['only'] = ['init'];
    return $behaviors;
  }

  public function actionInit(){
    return 124;
  }
}

вот в модели User метод:
public static function findIdentityByAccessToken($token, $type = null)
    {
        return static::findOne(['auth_key' => $token]);
    }

вот на другом сайте ajax запрос к api:
$(function() {
    $.ajax('https://mysite/api/init',{
        dataType: "json",
        method: 'post',
        data: {access_token:'1NLS4Os8zNwdeImN2hUUcaDpnTzNrfeM'},
        success: function (data) {
            $("#question").attr('data-key',data);
            $("#loader").hide();
            $("#test-body").show();
        }
    });
});

С маршрутизацией все ок, запрос попадает по адресу. Передает существующий auth_key, но отвечает сервер так:
code:0
message:"Your request was made with invalid credentials."
name:"Unauthorized"
status:401

Такое ощущение, что не правильно передан token, как буд-то он его не видит. Уже пять раз прошелся по всем методам и не пойму что не так. Нужен хелп.
  • Вопрос задан
  • 6508 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
mendler
@mendler
Senior Web Developer
data: {access_token:'1NLS4Os8zNwdeImN2hUUcaDpnTzNrfeM'}

Ключ access-token, а не access_token,
https://github.com/yiisoft/yii2/blob/master/framew..., строка 21
Если необходим access_token, то нужно переопределить в настройках поведения.
Ответ написан
@Slavanb
$behaviors['authenticator']['class'] = QueryParamAuth::className();
$behaviors['authenticator']['tokenParam'] = 'token'; //- по умолчанию access-token
// меняем get параметр access-token на token
// https://mysite/api/init?token=FFFF70it7tzNsHddEiq0...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы