zoukankan      html  css  js  c++  java
  • 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
    或许你有更好的办法,留言吧~
  • 相关阅读:
    python中if __name__ == '__main__': 的解析
    python项目练习地址
    HTTP Response Splitting攻击探究 <转>
    常用操作系统扫描工具介绍
    app兼容性测试的几种方案
    svn自动备份并上传到ftp
    有关交易的性能测试点
    修改文件测试的测试点
    新增文件测试的测试点
    添加附件测试的测试点
  • 原文地址:https://www.cnblogs.com/liushannet/p/1805257.html
Copyright © 2011-2022 走看看