1.先把\modules\auth\mysql.sql导入数据库
得先看下ORM,因为基于ORM上的.我在Blog有部分介绍.不过整体给人感觉生硬,
以下内容来源于官方GIT
建立用户,添加角色
<?php $user = ORM::factory('user'); $user->username = 'admin'; $user->email = 'admingmail.com'; $user->password = 'good_pass'; $user->save(); // dont forget to add roles. 'login' role needs for successful login $user->add('roles', ORM::factory('role', array('name' => 'admin'))); $user->add('roles', ORM::factory('role', array('name' => 'login')));
登录:
<?php $auth = Auth::instance(); if ($auth->login('admin', 'good_pass',true)) { echo 'hello, '.$auth->get_user()->username; } else { echo 'login failed!'; }
如果设置了自动登录,如上$auth->login的第三个参数为true,则可以使用
<?php if ($auth->auto_login()) { echo 'hello, '.$auth->get_user()->username; } else { echo "no login"; }
实现自动登录
登录完了就要注销咯:
<?php
$auth->logout();
取得用户信息:
$auth->get_user();//返回一个USER ORM对象
想了解ORM使用,请查阅本BLOG中ORM的使用的文章
对于这个模块,有几个不是很明白其中作用的地方:在配置文件中
'salt_pattern'//给密码添加字符串,为什么要这样做呢,直接HASH不就完了吗~
还有个配置信息提示下,大家好理解的
'lifetime' => 100000,//这个值设置的是当前登录COOKIE的有效期,即你关掉浏览器后在启动,
依旧处于登录状态,就是设置这个值啦,如果你需要关掉浏览器就失效的话设置为1咯,也可以设置不自动登录(这个好点)
还有一个就是想手动清理已经过期的自动登录用户的那些信息,默认是1%的清除概率,可以这样调用
Model::factory("user_token")->delete_expired();//Model_Auth_User_Token 也是ORM来的~除了这个没什么大作用
取得角色对象
$auth->get_user()->roles->find_all();//返回角色ORM数组
关于$auth的还有一些更改密码,再次密码验证(没多大作用),转换用户角色,
取得用户加密后的密码(反正是哈希值来的,可以做URL登录用,不过KOHANA没有提供这样的功能,通过如下可以实现)
因为KOHANA加密后的东西无法解密的,就是说在不知道原密码的情况下无法登录的,但有时候又要提供没有原密码的情况下的登录
比如发送给客户的邮件,密码我们已经不知道了,通过KOHANA的API是没法登录的,但我们可以知道用户密码哈希后的值,\
所有我们可以玩auth/classes/auth.php增加一个FN,
(我开始想不修改原有的基础上进行扩展的,但不知道该把这样放置到哪里,毕竟他即不是MODULE也不是COntroller)
下面是我增加的代码:
<?php defined('SYSPATH') or die('No direct access allowed.'); abstract class Auth extends Kohana_Auth {//原本为一个空的抽象类 /** * 用加密后的密码登录 * * @param string username to log in * @param string hash_password to check against * @param boolean enable autologin * @return boolean */ public function hashlogin($username, $hash_password, $remember = FALSE) { if (empty($hash_password)) return FALSE; return $this->_login($username, $hash_password, $remember); } }
客户端使用:
<?php $urlauth=Auth::instance(); if($urlauth->hashlogin("admin","3984d4d702e9ef1d7754b0f025b8fcc4d7ae869409ea4c246d")){ echo 'hello, '.$urlauth->get_user()->username; } else { echo 'login failed!'; }
如果通过URL来的,最好还是在用户表里添加一个用于URL登录的KEY,验证该KEY,OK->取密码按上面的流程通过验证
通过上面的方法好处是无缝的结合使用KOHANA的AUTH
或许你有更好的办法,留言吧~