我已经完成了the CakePHP website的教程,为我的网站添加了身份验证(除了我的网站上不需要任何角色,只是管理员登录)。在我的机器上,整个身份验证工作以及我只能以管理员身份访问的页面。我已将文件夹和数据库复制到我的网站托管服务商,但我在登录时遇到了问题。
这就是我的代码:
在 config / routes.php 中我有:
Router::prefix('admin', function($routes) {
$routes->connect('/', ['controller'=>'Users','action'=>'login']);
$routes->fallbacks('InflectedRoute');
});
src / Controller / Admin / UsersController.php 中的
namespace App\Controller\Admin;
use App\Controller\AppController;
use Cake\Event\Event;
class UsersController extends AppController {
public function beforeFilter(Event $event) {
parent::beforeFilter($event);
$this->Auth->allow(['logout']);
}
public function login(){
if ($this->request->is('post')) {
$user = $this->Auth->identify();
if ($user) {
$this->Auth->setUser($user);
return $this->redirect($this->Auth->redirectUrl());
}
$this->Flash->error(__('Please check your username and password.'));
}
}
}
实体用户包含执行散列的方法:
protected function _setPassword($password)
{
return (new DefaultPasswordHasher)->hash($password);
}
最后,在 Controller / AppController.php 中,我实现了以下功能,这应该允许每个登录用户访问所有页面。
class AppController extends Controller
{
public function initialize()
{
parent::initialize();
$this->loadComponent('Flash');
$this->loadComponent('Auth', [
'loginRedirect' => [
'controller' => 'requests',
'action' => 'index'
],
'logoutRedirect' => [
'prefix' => false,
'controller' => '/'
]
]);
}
public function beforeFilter(Event $event)
{
parent::beforeFilter($event);
if($this->request->session()->check('Auth.User.id')) {
$this->layout = 'admin';
}
}
public function isAuthorized($user)
{
return true;
}
}
正如我所说,这适用于我的本地机器。但是,在服务器上,我总是收到以下错误:
您无权访问该位置。
我尝试了各种PHP版本,以确保错误不存在。使用打印输出,我可以看到我在if($user)
方法中通过login()
检查。但是,现在我真的不知道如何继续,我对可能的解决方案一无所知。我已经在webhoster的子域中安装了CakePHP - 这可能是个问题吗?