Я думаю, это глупый вопрос, но у меня возникают проблемы с входом в разделы с ограниченным доступом на сайте, который я создаю в Cake.Не могу войти с использованием AuthComponent в Cake php
Для начала я вижу, что строка пароля в $this->request->data['Usuario']['clave']
не совпадает с хеш-строкой с использованием SimplePasswordHasher
в функции beforeSave
в модели. Я должен также сказать, что модель не модель по умолчанию пользователя, потому что я пишу заявление на испанском языке, и я не хочу использовать модель по умолчанию, так что моя конфигурация компоненты:
class AppController extends Controller {
/*function beforeFilter() {
date_default_timezone_set('America/Mexico_City');
}*/
public $components = array(
'Session',
'Auth' => array(
'Form'=>array(
'userModel' => 'Usuario',
'unauthorizedRedirect' => false,
'loginRedirect' => array(
'controller' => 'ComplejosResidenciales',
'action' => 'index'
),
'logOutRedirect' => array(
'controller' => 'Usuarios',
'action' => 'index'
),
'fields' => array(
'username' => 'usuario',
'password' => 'clave'
),
'authorize' => 'Controller'
)
)
);
}
Так что я решил не хешировать поле пароля, но все равно безрезультатно. Я желаю, чтобы кто-нибудь мог одолжить мне руку, потому что я новичок в CakePHP и не знаю, как это исправить.
Я полагаю, что это должно быть что-то с методом Auth->login()
, потому что я не придерживаюсь конвенций здесь, но я не знаю, как настроить указанный метод. В настоящее время это, как следует:
public function login() {
if($this->request->is('post')) {
if($this->Auth->login()) {
return $this->Auth->redirectUrl($this->Auth->redirectUrl());
}
else {
$this->Session->setFlash(__('Las credenciales proporcionadas no son correctas'), 'default', array(), 'auth');
}
Как RRD заостренные, мой массив $ компоненты неправильно, поэтому я изменил его:
public $components = array(
'Session',
'Auth'=>array('loginRedirect'=>array('controller'=>'ComplejosResidenciales', 'action'=>'index'), 'logOutRedirect'=>array('controller'=>'Usuarios', 'action'=>'index'), 'loginAction'=>array('controller'=>'Usuarios', 'action'=>'login'), 'authenticate'=>array('Form'=>array('userModel'=>'Usuario', 'fields'=>array('username'=>'usuario', 'password'=>'clave')))));
Что лучше, по cakephp.org
Не устанавливайте другие ключи конфигурации Auth (например, authError, loginAction и т. Д.) В элементе аутентификации или элемента Form. Они должны быть на том же уровне, что и ключ аутентификации.
Но он не работает.
Борясь с этим, и я не могу его повесить, я хочу, чтобы кто-то указывал, что я делаю неправильно. В моей AppController я объявил компонент и функцию beforeFilter так:
public $components = array('Auth'=>array('loginRedirect'=>array('controller'=>'ComplejosResidenciales', 'action'=>'index'),
'logoutRedirect'=>array('controller'=>'Usuarios', 'action'=>'login'),
), 'Session');
public function beforeFilter(){
$this->Auth->authenticate = array(
AuthComponent::ALL => array('userModel' => 'Usuario', "fields" => array("username" => "usuario", "password" => "clave"), 'Form'));
}
А то у меня есть функция входа, которая идет (очевидно, я думаю) в UsuariosController, как это:
public function login() {
if($this->request->is('post')) {
if($this->Auth->login()) {
return $this->Auth->redirectUrl($this->Auth->loginRedirect);
}
else {
$this->Session->setFlash(__('Las credenciales proporcionadas no son correctas'), 'default', array(), 'auth');
}
}
}
Но я просто продолжаю видеть сообщение «Las credenciales proporcionadas no son correctas». Я не знаю, правильно ли я вызываю метод компонента Auth в части $this->Auth->login()
, потому что, по-видимому, у меня нет результата при вызове такого типа без аргументов, но я попробовал называть его аргументом $this->request->data
и, как результат, Не важно, что я написал в полях имени пользователя и пароля, все пройдет, что плохо, конечно.
Теперь я понимаю, почему кодирование $this->Auth->login($this->request->data)
в результате дает неограниченный доступ:
В 2.x $ this-> Auth-> логин ($ this-> request-> данные) зарегистрирует пользователя в с независимо от того, какие данные отправлены, тогда как в 1.3 $ this-> Auth-> login ($ this-> data) будет пытаться сначала идентифицировать пользователя и только войти в систему при успешном завершении.
Согласно руководству по тортам. Кажется, я не могу правильно прочитать какой-либо документ об этом. Во всяком случае, я прошу кого-нибудь помочь мне, потому что я спешу сюда.После прочтения некоторых других документов, я думаю, что Auth компонент должен корректно обрабатывать все, до тех пор, как я обеспечить правильную конфигурацию, так что я в конечном итоге делает beforeFilter()
вызов в AppController, как это:
var $components = array('Auth', 'Session');
public function beforeFilter() {
$this->Auth->loginAction = array('controller'=>'Usuarios', 'action'=>'login');
$this->Auth->redirectLogin = array('controller'=>'ComplejosResidenciales', 'action'=>'add');
$this->Auth->authenticate = array('Form'=>array('userModel'=>'Usuario', 'fields'=>array('username'=>'usuario', 'password'=>'clave')));
}
Тогда, в моем «UsuariosController» Я:
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('index', 'view', 'add', 'edit', 'delete');
}
и у меня есть для входа и выхода из функции, очень просто, но это не работает, и это не перенаправляет меня на вход в системе и не позволяет мне получить доступ к любому другому контроллеру , он ничего не делает. Пожалуйста помоги!
/**
* login and logout functions
*
*/
public function login() {
}
public function logout() {
$this->redirect($this->Auth->logout());
}
Для этого вам следует четко указать основные принципы Auth. Прочтите руководство или книгу, например https://leanpub.com/CakePHPUserAuthentication Ваше объявление массива Auth неверно. Какую версию CakePHP вы используете? – rrd
@rrd Я использую торт 2.4.5, но я не понимаю, что не так с моим объявлением компонента, я действительно не разработал большую часть авторизации, но на данный момент я просто пытаюсь ограничить все контроллеры и разрешать их по мере необходимости в части beforeFilter каждого –