Kohana 之 auth

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
或许你有更好的办法,留言吧~
原文地址:https://www.cnblogs.com/liushannet/p/1805257.html