从特定Controller中排除HTTP身份验证

时间:2014-12-02 12:53:42

标签: .htaccess cakephp .htpasswd

我在 CakePHP 2 中创建了一个通过 .htaccess 文件进行HTTP保护的应用程序。 <{1}}中的某个目录中已经有例外,效果很好。

webroot

但现在还需要针对特定​​网址的例外情况,这是某个控制器查看。我试图简单地添加这一行,但它不起作用,仍然要求用户名和密码。

AuthType Basic
AuthName "My Application"
AuthUserFile /my/application/path/.htpasswd
Require valid-user

SetEnvIf Request_URI "files/photos/" allow

Order allow,deny
Allow from env=allow
Satisfy any

我有SetEnvIf Request_URI "users/confirmation/" allow UsersController方法。关键是一个是物理路径而另一个是“虚拟”。

有什么想法解决这个问题?

2 个答案:

答案 0 :(得分:0)

如果您正在使用cakephp Auth,则可以从身份验证中排除控制器的某些操作。所以在特定控制器中写下面的行,例如UsersController。

&#13;
&#13;
public function beforeFilter()
	{
		parent::beforeFilter();
		$this->Auth->allow('register','forgot_password','reset_password','password','login','logout');
	}
&#13;
&#13;
&#13;

即使没有身份验证,也可以访问用allow()编写的操作。如果想要允许整个控制器,则无需传递。例如$这 - &GT; Auth-&GT;允许();

答案 1 :(得分:0)

通过更改包含要通过身份验证忽略的路径的行来解决:

SetEnvIf Request_URI "files/photos/" noauth=1
SetEnvIf Request_URI "users/confirmation/*" noauth=1

然后,使用REDIRECT_前缀添加例外:

Allow from env=REDIRECT_noauth