CakePHP 3.7 - установить переменную представления изнутри пользовательского класса аутентификации - PullRequest
0 голосов
/ 14 января 2019

Я пишу свой собственный класс аутентификации для API REST без сохранения состояния. Чтобы упростить использование для разработчиков, я бы хотел возвращать конкретные сообщения об ошибках, когда аутентификация не удалась, в идеале просто с помощью переменной представления. Однако я не выяснил, как класс authenticate может обращаться к переменным представления.

Как установить переменные представления из аутентификации? Или как я могу обойти это?

Чтобы дать представление:

<?php

namespace App\Auth;

class HmacAuthenticate extends BasicAuthenticate
{

    // ...

    public function getUser(ServerRequest $request)
    {
        $user_id = $request->getEnv('PHP_AUTH_USER');
        $hash = $request->getEnv('PHP_AUTH_PW');
        $timestamp = $request->getEnv('HTTP_X_AUTHORIZATION_TIMESTAMP');

        if (!is_string($user_id) || $user_id === '' || !is_string($hash) || $hash === '' || !is_string($timestamp) || $timestamp === '')
        {
            $this->set('authError', 'Missing essential fields');

            return false;
        }

        // ...
    }
}

1 Ответ

0 голосов
/ 15 января 2019

Вы можете установить переменные просмотра внутри самого действия входа в систему в контроллере, указанном вами в конфигурации аутентификации, например:

 $this->loadComponent('Auth', [
    'loginAction' => [
        'controller' => 'Users',
        'action' => 'login',
        'plugin' => 'Users'
    ],

Для этой конфигурации в действии UsersController login у вас, вероятно, есть что-то вроде этого, где вы можете установить переменные представления и сериализовать их:

public function login()
{
    if ($this->request->is('post')) {
        $user = $this->Auth->identify();
        if ($user) {
            $this->Auth->setUser($user);
            return $this->redirect($this->Auth->redirectUrl());
        } else {
            // For example:
            $user_id = $this->request->getEnv('PHP_AUTH_USER');
            $hash = $request->getEnv('PHP_AUTH_PW');
            $timestamp = $request->getEnv('HTTP_X_AUTHORIZATION_TIMESTAMP');

            if (!is_string($user_id) || $user_id === '' || !is_string($hash) || $hash === '' || !is_string($timestamp) || $timestamp === '')
            {
               $this->set('authError', 'Missing essential fields');
            }
        }
    }

    $this->set('_serialize', true);
}
...