我有一个在IIS上运行的Intranet应用程序,使用CakePHP 3.从IIS我可以访问服务器var $_SERVER['AUTH_USER']
,我想使用此变量来验证用户。
我在数据库中创建了一个用户表,其中包含我要与AUTH_USER
匹配的用户名字段。我创建了一个自定义Auth组件,如下所示:
namespace App\Auth;
use Cake\Auth\BaseAuthenticate;
use Cake\Network\Request;
use Cake\Network\Response;
use Cake\ORM\TableRegistry;
class AuthuserAuthenticate extends BaseAuthenticate
{
public function authenticate(Request $request, Response $response) {
$username = str_replace('DOMAIN\\', '', $_SERVER['AUTH_USER']);
$users = TableRegistry::get('Users');
$user = $users->find()->where(['username' => $username])->first();
if ($user) {
return $user;
} else {
$user = $this->Users->newEntity();
$user->username = $username;
if ($this->Users->save($user)) {
return $user;
} else {
return false;
}
}
}
在AppController initialize()
中,我尝试使用自定义组件加载Auth。
$this->loadComponent('Auth', [
'authenticate' => [
'Basic' => [
'fields' => ['username' => 'username'],
'userModel' => 'Users'
],
],
'loginAction' => [
'controller' => 'Pages',
'action' => 'display'
],
'storage' => 'Memory',
'unauthorizedRedirect' => false
]);
$this->Auth->config('authenticate', 'Authuser');
在这一点上,无论我试图继续进行哪个页面,我都会被重定向,我不确定它是否无法进行身份验证或其他问题。
我尝试将其添加到AppController作为测试:
public function isAuthorized($user)
{
return true;
}
但是我无法使用此代码访问任何页面。谁能让我知道我做错了什么?
谢谢,
KEZ
答案 0 :(得分:2)
您的auth组件未实现authorize
方法。
public function authorize($user, Request $request) {
// return true if authorized
// return false if not authorized
}
其次,使用isAuthorized
组件时会调用ControllerAuthorize
。如果要使用控制器身份验证,则应使用ControllerAuthorize
insted。
$this->loadComponent('Auth', [
'authenticate' => 'Controller'
]);
另外:您正在配置BasicAuthenticate
组件,然后立即覆盖配置。