Hi all,
It is not overtly documented but you can check your http
authentication against your normal users table, just like Auth
Component does. I didn't know this before. I thought I had to make an
loginUserrs array. But a simple change gave me the opportunity to
check the login any way I wanted.
Generally speaking I'd say this is a bad idea. Letting users login
using HTTP basic authentication is a bit of a security risk. It can be
very useful at times though so i thought I'd post my code in case
anyone else wants to use something like it... or just criticize the
whole idea until I change my mind :)
My reason is that I want a "protected" RSS feed. The feed will include
private information not intended for public use but I still like rss
as a notification scheme. THis is the best solution I have come up
with for protecting a feed.
Here is the relevant lines from my controller. Auth is globally
configured in AppController much like in the numerous tutorials
around. Nothing special there but it is active.
---
var $components = array('Security');
function beforeFilter() {
if ( $this->RequestHandler->isRss() ) {
$this->Auth->allow('index');
$this->Security->loginOptions = array(
'type'=>'basic',
'login'=>'authenticate',
'realm'=>'My_RSS_Feeds'
);
$this->Security->loginUsers = array();
$this->Security->requireLogin('index');
}
parent::beforeFilter();
}
function authenticate($args) {
$data[ $this->Auth->fields['username'] ] = $args['username'];
$data[ $this->Auth->fields['password'] ] = $this->Auth->password
($args['password']);
if ( $this->Auth->login($data) ) {
return true;
} else {
$this->Security->blackHole($this, 'login');
return false;
}
}
---
As you can see there is not much different from the cookbook (for
example). The key is the login-key in the loginOptions hash. This lets
me provide a method that will take care of allowing or disallowing a
login.
The authenticate method re-packages the username and password to suit
Auth and then tries to login.. and VoilĂ !
I noticed that returning true or false was not enough. I had to
specify that the request should "blackHole" here. I could try digest
authentication but I haven't gotten around to it yet. (My normal
logins pass passwords in the clear already so...)
That's all
/Martin
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"CakePHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---