新人联机求助:关于取消认证后(auth认证

第一篇 - dingo/api - 7.Authentication(认证) - 简书
第一篇 - dingo/api - 7.Authentication(认证)
支持三种认证方式
HTTP Basic (Dingo\Api\Auth\Provider\Basic)
JSON Web Tokens (Dingo\Api\Auth\Provider\JWT)
OAuth 2.0 (Dingo\Api\Auth\Provider\OAuth2)
相关文档:
本文重点介绍 jwt
1. composer 安装 jwt
说明:此内容之前的文章已做过介绍,见框架的 环境搭建专题 里的jwt篇
2. dingo/api配置 jwt
config/api.php 文件里 'auth' 数组配置 jwt支持
'auth' =& [
'jwt' =& Dingo\Api\Auth\Provider\JWT::class
3. 保护 站点
中间件:api.auth
providers数组:支持的 认证插件,此处的名与 config/api.php的auth数组里配置的名字相关
// api.auth 中间件
$api-&version('v1', ['middleware' =& 'api.auth'], function ($api) {
// Routes within this version group will require authentication.
// providers : 'basic', 'oauth'
$api-&version('v1', function ($api) {
$api-&get('user', ['middleware' =& 'api.auth', 'providers' =& ['basic', 'oauth'], function () {
// This route requires authentication.
4. Controller里使用认证
使用middleware()函数
class UserController extends Illuminate\Routing\Controller
public function __construct()
$this-&middleware('api.auth');
// Only apply to a subset of methods.
$this-&middleware('api.auth', ['only' =& ['index']]);
public function index()
public function posts()
5. 获取User
app('Dingo\Api\Auth\Auth')-&user();
$this-&auth-&user();前提:
Controller里
$user = app('Dingo\Api\Auth\Auth')-&user();
$user = $this-&auth-&user();
6. 针对是否认证,进行不同操作
根据 hidden
$api-&version('v1', function ($api) {
$api-&get('users/{id}', function ($id) {
$user = User::findOrFail($id);
// Attempt to authenticate the request. If the request is not authenticated
// then we'll hide the e-mail from the response. Only authenticated
// requests can see other users e-mails.
if (! app('Dingo\Api\Auth\Auth')-&user()) {
$hidden = $user-&getHidden();
$user-&setHidden(array_merge($hidden, ['email']));
不努力就没有明天Auth权限认证
本例采用auth权限认证,用户和用户组采用多对多关系处理,自动添加rule规则,带有jquery-validator插件,自动控制菜单显示或隐藏。
config.php中的配置
'AUTH_CONFIG'=&array(
&&&'AUTH_ON'&=&&true,&//认证开关
&&&'AUTH_TYPE'&=&&1,&//&认证方式,1为时时认证;2为登录认证。
&&&'AUTH_GROUP'&=&&'think_auth_group',&//用户组数据表名
&&&'AUTH_GROUP_ACCESS'&=&&'think_auth_group_access',&//用户组明细表
&&&'AUTH_RULE'&=&&'think_auth_rule',&//权限规则表
&&&'AUTH_USER'&=&&'think_user'//用户信息表
第一步、Thinkphp3.2中的library下有Auth.class.php有所需的三个表及注释。创建数据表。自己还需建一张用户表。
n&&&&&& think_auth_rule,规则表(存放所有的权限规则)
n&&&&&& think_auth_group 用户组表(存放一个用户组有哪些权限)
n&&&&&& think_auth_group_access 用户组明细表(其实就是叫用户表和用户组的中间表)
n&&&&&& think_user 用户表(需自建)
第二步、config.php中配置auth认证。
'AUTH_CONFIG'=&array(
&&&'AUTH_ON'&=&&true,&//认证开关
&&&'AUTH_TYPE'&=&&1,&//&认证方式,1为时时认证;2为登录认证。
&&&'AUTH_GROUP'&=&&'think_auth_group',&//用户组数据表名
&&&'AUTH_GROUP_ACCESS'&=&&'think_auth_group_access',&//用户组明细表
&&&'AUTH_RULE'&=&&'think_auth_rule',&//权限规则表
&&&'AUTH_USER'&=&&'think_user'//用户信息表
第三步、需要验证的类都继承CommonController。创建CommonController.class.php文件。(此类针对多入口的情况)
namespace Admin\C
use Think\C
class CommonController extends Controller {
& public function _initialize () {
&&&&& if(!isset($_SESSION[C('USER_AUTH_KEY')])){ //判断是否有uid
&&&&&&&&&&& $this-&redirect("Public/login");
& &&& $Auth = new \Think\Auth();
& &&& $module_name=CONTROLLER_NAME.'/'.ACTION_NAME;
& &&& if($_SESSION['uname']==C('ADMIN_AUTH_KEY')){& //以用户名来判断是否是超级管理员,绕过验证,不用用户组来判断的原因是用户组有时候是中文& ,而且常删除或更改。
& &&& if(!$Auth-&check($module_name,$_SESSION[C('USER_AUTH_KEY')])){
& &&&&&&& $this-&error('没有权限');
第四步、登录验证的PublicController和以前都差不多。创建PublicController.class.php
namespace Admin\C
use Think\C
class PublicController extends Controller {
&&& public function index(){
&&&&&&& $this-&display();
& &&//登录页
&&& public function login(){
&&&&&&& $this-&display();
&&& //登出
&&& public function logout(){
&&&&&&& if($_SESSION[C('USER_AUTH_KEY')]) {
&&&&&&&&&&& session_destroy();
&&&&&&&&&&& $this-&redirect("Public/login");
&&&&&&& }else {
&&&&&&&&&& &$this-&error('已经登出!');
&&& //验证登陆表单
&&& public function checkLogin(){
&&& && $username=I('username','');
&&&&&&& $password=I('password','');
&&&&&&& $verify_code=I('verify','');
&&&&&&& if($username==''||$password==''||$verify_code==''){
& &&&&&&&&&&$this-&redirect("Public/login");
&&&&&&& if(!$this-&_verifyCheck($verify_code)){
&&&&&&&&&&& $this-&error("验证码错误!!!");
&&&&&&& $user=M('user')-&where(array('username'=&$username))-&find();
&&&&&&& if(!$user||md5($password)!=$user['password']){
&&&&&&&&&&& $this-&error("用户名或密码错误!!!");
&&&&&&& if(!$user['status']){&& //status为0时表示锁定
&&&&&&&&&&& $this-&error("用户被锁定!!!");
&&&&&&& }else{
&&&&&&& && $data['login_ip'] =& get_client_ip();
&&&&&&&&&&& $data['last_login_time']=time();
&&&&&&&&&&& if(M("user")-&where(array('id'=&$user['id']))-&save($data)){
&&&&&&&&&&& &&& M("user")-&where(array('id'=&$user['id']))-&setInc("login_num");
&&&&&&&&&&& }
&&&&&&&&&&& session(C('USER_AUTH_KEY'),$user['id']);
&&&&&&&&&&& session('uname',$user['username']);
&&&&&&&&&&& $this-&success("登录成功...",U("Index/index"));
&&& //验证码
&&& public function verify(){
&&&&&&& $config = array(&&&
&&&&&&&&&&& 'fontSize'&&& =&&&& 20,&&&& // 验证码字体大小&&&
&&&&&&&&&&& 'length'&&&&& =&&&& 1,&&&&& // 验证码位数&&&
&&&&& &&&&&&'useNoise'&&& =&&& false,& // 关闭验证码杂点
&&&&&&&&&&& 'imageH'&&& =&& 50,&&&&&&&&& // 验证码图片高度
&&&&&&&&&&& 'imageW'&&& =&& 200,&&&&&&&&& // 验证码图片宽度
&&&&&&& );
&&&&&&& $Verify =new \Think\Verify($config);
&&&&&&& $Verify-&entry();
&&& //验证验证码
&&& private function _verifyCheck($code, $id = ''){
&&&&&&& $verify = new \Think\Verify();
&&&&&&& return $verify-&check($code, $id);
到这里,auth的权限认证就基本完成
第五步、创建AuthController.class.php(逻辑代码如下,就是一些CURD),多加了一个register方法,用来自动把规则的放入数据库中.本人把register放在function.php中方便其他类调用。用户和用户组采用多对多的关系处理,方便权限更为精细。
namespace Admin\C
use Think\C
class AuthController extends CommonController {
&&& //Auth认证管理
&&& public function index(){
&&&&&&& //获取用户信息
&&&&&&& $user=D("user")-&relation(true)-&field("password",true)-&select();
&&&&&&& $this-&user=$
&&&&&&& //获取用户组信息
&&&&&&& $group=M("auth_group")-&select();
&&&&&&& $obj=M("auth_rule");
&&&&&&& foreach($group as $k=&$v){
&&&&&&&&&&& $map['id'] = array('in',$group[$k]['rules']);
&&&&&&&&&&& $group[$k]['group']=$obj-&where($map)-&select();
&&&&&&& $this-&group=$
&&&&&&& //获取rule规则
&&&&&&& $this-&rule=M("auth_rule")-&select();
&&&&&&& //$ip = new \Org\Net\IpLocation("UTFWry.dat");
&&&&&&& //$location=$ip-&getlocation();
&&&&&&& //p($location);
&&&&&&& //p($group);
&&&&&&& $this-&display();
&&& //添加后台用户及表单处理
&&& public function user(){
&&&&&&& if(IS_POST){
&&&&&&&&&&& $data=array(
&&&&&&&&&&&&&&& 'username'=&I('username','','trim'),
&&& &&&&&&&&&& 'remark'=&I('remark','','trim'),
&& &&&&&&&&&&& 'password'=&I('password','','md5'),
&&& &&&&&&&&&& 'status'=&I('status',0,'intval'),
&&& &&&&&&&&&& 'rsgtime'=&$_SERVER['REQUEST_TIME'],
&&&&&&&&&&&&&&& 'login_num'=&0
&&&&&&&&& );
&&&&&&&&&&& if(!isset($_POST['role_id'])){
&&&&&&&&&&&&&&& $this-&error("请选择用户组...");
&&&&&&& &&&&}
&&&&&&&&&&& if($data['password']!=md5($_POST['repassword'])){
&&&&&&&&&&&&&&& $this-&error("两次密码不一致...");
&&&&&&&&&&& }
&&&&&&&&&&& if(M("user")-&where(array('username'=&$data['username']))-&find()){
&&&&&&&&&&&&&&& $this-&error("用户名已存在...");
&&&&&& &&&&&}
&&&&&&&&&&& if($lastInsertId=M("user")-&add($data)){
&&&&&&&&&&&&&&& foreach($_POST['role_id'] as $k=&$v){
&&&&&&&&&&&&&&&&&&& $arr=array(
&&&&&&&&&&&&&&&&&&&&&&& 'uid'=&$lastInsertId,
&&&&&&&&&&&&&&&&&&&&&&& 'group_id'=&$_POST['role_id'][$k]
&&&&& &&&&&&&&&&&&&&);
&&&&&&&&&&&&&&&&&&& M("auth_group_access")-&add($arr);
&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& M("auth_group_access")-&add($arr);
&&&&&&&&&&&&&&& $this-&success("添加成功...",U("Auth/index"));
&&&&&&&&&&& }else{
&&&&&&&&&&&&&&& $this-&error("添加失败...");
&&&&&&&&&&& }
&&& && }else{
&&&&&&&&&&& $this-&group=M("auth_group")-&field("id,title")-&select();
&&& &&&&&& $this-&display();
&&& //添加后台用户组及表单处理
&&& public function group(){
&&& && if(IS_POST){
&&& &&&&&& $data=array(
&&& &&&&&&&&&& 'title'=&I('title','','trim'),
&&& &&&&&&&&&& 'status'=&I('status',0,'intval')
&&& &&&&&&&&&& );
&&&&&&&&&&& if(M("auth_group")-&where(array('title'=&$data['title']))-&find()){
&&&&&&&&&&&&&&& $this-&error("用户组名称已存在...");
&&&&&&&&&&& }
&&& &&&&&& if(M("auth_group")-&add($data)){
&&& &&&&&&&&&& $this-&success("添加成功...",U("Auth/index"));
&&& &&&&&& }else{
&&& &&&&&&&&&& $this-&error("添加失败...");
&&& &&&&&& }
&&& && }else{
&&& &&&&&& $this-&display();
&&& //添加后台权限及表单处理
&&& public function auth(){
&&& && if(IS_POST){
&&& &&&&&& $data=array(
&&& &&&&&&&&&& 'name'=&I('name','','trim'),
&&& &&&&&&&&&& 'title'=&I('title','','trim'),
&&& &&&&&&&&&& 'condition'=&I('condition','','trim'),
&&& &&&&&&&&&& 'status'=&I('status',0,'intval'),
&&& &&&&&&&&&& 'type'=&I('type',0,'intval'),
&&& &&&&&&&&&& );
&&& &&&&&& if(M("auth_rule")-&add($data)){
&&& &&&&&&&&&& $this-&success("添加成功...",U("Auth/index"));
&&& &&&&&& }else{
&&& &&&&&&&&&& $this-&error("添加失败...");
&&& &&&&&& }
&&& && }else{
&&& &&&&&& $this-&display();
&&& //注册rule规则
&&& public function register(){
&&&&&&& $class_name=get_class();
&&&&&&& return register($class_name);
&&& //删除用户组
&&& public function deleteGroup(){
&&&&&&& if(IS_GET){
&&&&&&&&&&& if(!isset($_GET['id'])){
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&&&& $id=I("id",0,"intval");
&&&&&&&&&&& if(!$id){
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&&&& if(M("auth_group")-&where(array("id"=&$id))-&delete()){
&&&&&&&&&&&&&&& M("auth_group_access")-&where(array("group_id"=&$id))-&delete();
&&&&&&&&&&&&&&& $this-&success("删除成功...",U("Auth/index"));
&&&&&&&&&&& }else{
&&&&&&&&&&&&&&& $this-&error("删除失败...");
&&&&&&&&&&& }
&&& //修改用户组
&&& public function modifyGroup(){
&&&&&&& if(IS_GET){
&&&&&&&&&&& if(!isset($_GET['id'])){
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&&&& $id=I("id",0,"intval");
&&&&&&&&&&& if(!$id){
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&&&& $group=M("auth_group")-&where(array("id"=&$id))-&find();
&&&&&&&&&&& $rule=M("auth_rule")-&select();
&&&&&&&&&&& foreach($rule as $k=&$v){
&&&&&&&&&&&&&&& if(in_array($rule[$k]['id'],explode(',',$group['rules']))){
&&&&&&&&&&&&&&&&&&& $rule[$k]['is_checked']=1;
&&&&&&&&&&&&&&& }else{
&&&&&&&&&&&&&&&&&&& $rule[$k]['is_checked']=0;
&&&&&&&&&&&&&&& }
&&&&&&&&&&& }
&&&&&&&&&&& $this-&rule=$
&&&&&&&&&&& $this-&group=$
&&&&&&&&&&& $this-&id=$
&&&&&&&&&&& //p($rule);
&&&&&&&&&&& $this-&display();
&&&&&&& }elseif(IS_POST){
&&&&&&&&&&& $data=array(
&&&&&&&&&&&&&&& 'title'=&I("title","","trim"),
&&&&&&&&&&&&&&& 'rules'=&implode(",",$_POST['rule']),
&&&&&&&&&&&&&&& 'status'=&I("status","","trim")
&&&&&&&&&&& );
&&&&&&&&&&& if(M("auth_group")-&where(array("id"=&$_POST['id']))-&save($data)){
&&&&&&&&&&&&&&& $this-&success("修改成功...",U("Auth/index"));
&&&&&&&&&&& }else{
&&& &&&&&&&&&&&&$this-&error("修改失败...");
&&&&&&&&&&& }
&&& //删除RULE
&&& public function deleteRule(){
&&&&&&& if(IS_GET){
&&&&&&&&&&& if(!isset($_GET['id'])){
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&&&& $id=I("id",0,"intval");
&&& &&&&&&&&if(!$id){
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&&&& if(M("auth_rule")-&where(array("id"=&$id))-&delete()){
&&&&&&&&&&&&&&& $this-&success("删除成功...",U("Auth/index"));
&&&&&&&&&&& }else{
&&&&&&&&&&&&&&& $this-&error("删除失败...");
&&&&&&& &&&&}
&&& //修改RULE
&&& public function modifyRule(){
&&&&&&& if(IS_POST){
&&&&&&&&&&& if(!isset($_POST['id'])){
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&&&& $id=I("id",0,"intval");
&&&&&&&&&&& unset($_POST['id']);
&&&&&&&&&&& if(!$id){
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&&&& if(M("auth_rule")-&where(array("id"=&$id))-&save($_POST)){
&&&&&&&&&&&&&&& $this-&success("修改成功...",U("Auth/index"));
&&&&&&&&&&& }else{
&&&&&&&&&&&&&&& $this-&error("修改失败...");
&&&&&&&&&&& }
&&& //删除用户
&&& public function deleteUser(){
&&&&&&& if(IS_GET){
&&&&&&&&&&& if(!isset($_GET['id'])){
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&&&& $id=I("id",0,"intval");
&&&&&&&&&&& if(!$id){
&&&&&&&&&&&&&&&
&&&& &&&&&&&}
&&&&&&&&&&& if(M("user")-&where(array("id"=&$id))-&delete()){
&&&&&&&&&&&&&&& M("auth_group_access")-&where(array("uid"=&$id))-&delete();
&&&&&&&&&&&&&&& $this-&success("删除成功...",U("Auth/index"));
&&&&&&&&&&& }else{
&&&&&&&&&&&&&&& $this-&error("删除失败...");
&&&&&&&&&&& }
&&& //修改用户
&&& public function modifyUser(){
&&&&&&& if(IS_POST){
&&&&&&&&&&& $id=I("id",0,"intval");
&&&&&&&&&&& if(!$id){
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&&&& $data['username']=I("username","","trim");
&&&&&&&&&&& $data['remark']=I("remark","","trim");
&&&&&&&&&&& $data['status']=I("status",0,"intval");
&&&&&&&&&&& $tmp=0;
&&&&&&&&&&& if(isset($_POST['role_id'])){
&&&&&&&&&&&&&&& M("auth_group_access")-&where(array("uid"=&$id))-&delete();
&&&&&& &&&&&&&&&foreach ($_POST['role_id'] as $key =& $value) {
&&&&&&&&&&&&&&&&&&& if(M("auth_group_access")-&add(array("uid"=&$id,"group_id"=&$_POST['role_id'][$key]))){
&&&&&&&&&&&&&&&&&&&&&&& $tmp=1;
&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& }
&&&&&&&&&&& }
&&&& &&&&&&&if(trim($_POST['password'])){
&&&&&&&&&&&&&&& if(md5($_POST['password'])!=md5($_POST['repassword'])){
&&&&&&&&&&&&&&&&&&& $this-&error("两次密码输入不一致...");
&&&&&&&&&&&&&&& }else{
&&&&&&&&&&&&&&&&&&& $data['password']=I("password","","md5");
&&&&&&&&&&& &&&&}
&&&&&&&&&&& }
&&&&&&&&&&& if(M("user")-&where(array("id"=&$id))-&save($data)){
&&&&&&&&&&&&&&& $this-&success("修改成功...",U("Auth/index"));
&&&&&&&&&&& }else{
&&&&&&&&&&&&&&& if($tmp){
&&&&&&&&&&&&&&&&&&& $this-&success("修改成功...",U("Auth/index"));
&&& &&&&&&&&&&&&}else{
&&&&&&&&&&&&&&&&&&& $this-&error("修改失败...");
&&&&&&&&&&&&&&& }
&&&&&&&&&&& }
&&&&&&& }elseif(IS_GET){
&&&&&&&&&&& if(!isset($_GET['id'])){
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&&&& $id=I("id",0,"intval");
&&&&&&&&&&& if(!$id){
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&&&& $this-&user=M("user")-&where(array('id'=&$id))-&field("password",true)-&find();
&&&&&&&&&&& $user_group=M("auth_group_access")-&where(array("uid"=&$id))-&select();
&&&&&&&&&&& $group=M("auth_group")-&select();
&&&&&&&&&&& foreach($user_group as $key =& $value){
&&&&&&&&&&&&&&& $user_group[$key]['group_name']=M("auth_group")-&where(array("id"=&$user_group[$key]['group_id']))-&getField("title");
&&&&&&&&&&& }
&&&&&&&&&&& $this-&user_group=$user_
&&&&&&&&&&& $this-&group=$
&&&&&&&&&&& $this-&display();
function.php如下:(authCheck方法会在模板中有使用,用来控制菜单等显示或隐藏,不需自己写sql来循环判断显不显示)
& * 注册rule规则
& * @param class_name string& 类的名称
& * @return str&&&&&&&&&& 返回错误或者正确信息
function register($class_name){
&&& $data=get_class_methods($class_name);
//把一些父类的方法过滤掉&&& $arr=array('_initialize','__set','__construct','display','show','fetch','buildHtml','theme','assign',' __set','get','__get','__isset','__call','error','success','ajaxReturn','redirect','__destruct');
&&& foreach($arr as $k=&$v){
&&&&&&& if(in_array($arr[$k],$data)){
&&&&&&&&&&& $tmp=array_keys($data,$arr[$k]);
&&&&&&&&&&& unset($data[$tmp[0]]);
&&& $obj=M("auth_rule");
&&& $msg='';
&&& foreach($data as $k=&$v){
&&&&&&& $data[$k]=CONTROLLER_NAME.'/'.$data[$k];
&&&&&&& if(!$obj-&where(array('name'=&$data[$k]))-&find()){
&&&&&&&&&&& if($obj-&add(array('name'=&$data[$k]))){
&&&&&&&&&&&&&&& $msg=$msg.$data[$k].'注册成功\n';
&&&&&&&&&&& }else{
&&&&&&&&&&&&&&& $msg=$msg.$data[$k].'注册失败\n';
&&&&&&&&&&& }
&&&&&&& }else{
&&&&&&&&&&& $msg=$msg.$data[$k].'已注册\n' ;
&&& echo "&script&alert('".$msg."');history.back(-1);&/script&";
& * 控制模板中菜单的显示
& * @param rule string|array& 需要验证的规则列表,支持逗号分隔的权限规则或索引数组
& * @param uid& int&&&&&&&&&& 认证用户的id
& * @param string mode&&&&&&& 执行check的模式
& * @param relation string&&& 如果为 'or' 表示满足任一条规则即通过验证;如果为 'and'则表示需满足所有规则才能通过验证
& * @return boolean&&&&&&&&&& 通过验证返回失败返回false
function authCheck($rule,$uid,$type=1, $mode='url', $relation='or'){
&&& $auth=new \Think\Auth();
&&& //获取当前uid所在的角色组id
&&& //$groups=$auth-&getGroups($uid);
&&& if($_SESSION['uname']==C('ADMIN_AUTH_KEY')){
&&& return $auth-&check($rule,$uid,$type,$mode,$relation)?true:
注:模板中使用authCheck的方法,在你需要进行显示或者隐藏的地方加上条件就可以了。
& &ul class="nav nav-tabs nav-stacked main-menu"&
&&&&& &if condition="authCheck('Auth/index',$_SESSION[C('USER_AUTH_KEY')])"&
&&&&&&&&& &li class="nav-header hidden-tablet"&&i class="icon-user"&&/i& Auth权限认证 &/li&
&&&&&&&& &&li&
&&&&&&&&&&& &a class="ajax-link" href="{:U('Auth/index')}"&&span class="hidden-tablet"&&&&&i class="icon-th"&&/i& Auth认证 &/span&&/a&
&&&&&& &&&&/li&
&&& &&&&/if&
最后一步、创建UserModel.class.php
&* Created by PhpStorm.
&* User: Administrator
&* Date: 14-10-20
&* Time: 下午12:54
namespace Admin\M
use Think\Model\RelationM
class UserModel extends RelationModel{
&&& //关联查询用户所属的用户组
&&& protected $_link = array(
&&&&&&& 'auth_group' =& array(
&&&&&&&&&&& 'mapping_type' =& self::MANY_TO_MANY,
&&&&&&&&&&& 'class_name' =& 'auth_group',
&&&&&&&&&&& 'mapping_name' =& 'classify',
&&&&&&&&&&& 'foreign_key' =& 'uid',
&&&&&&&&&&& 'relation_foreign_key' =& 'group_id',
&&&&&&&&&&& 'relation_table' =& 'think_auth_group_access'
阅读(...) 评论()HTTPBasicAuthHandler(基本验证)_urllib2网络编程库_python学习_编程语言学习__
HTTPBasicAuthHandler(基本验证)
当需要Authentication的时候,服务器发送一个头(同时还有401代码)请求Authentication。它详细指明了一个Authentication和一个域。这个头看起来像:
Www-authenticate: SCHEME realm="REALM".
Www-authenticate: Basic realm="cPanel Users"
客户端然后就会用包含在头中的正确的帐户和密码重新请求这个域。这是&基本验证&。为了简化这个过程,我们可以创建一个
HTTPBasicAuthHandler和opener的实例来使用这个handler。
HTTPBasicAuthHandler用一个叫做密码管理的对象来处理url和用户名和密码的域的映射。如果你知道域是什么(从服务器发送的authentication
头中),那你就可以使用一个HTTPPasswordMgr。多
数情况下人们不在乎域是什么。那样使用HTTPPasswordMgrWithDefaultRealm就很方便。它允许你为一个url具体指定用户名和密码。这将会在你没有为一个特殊的域提供一个可供选择的密码锁时提供给你。
我们通过提供None作为add_password方法域的参数指出
最高级别的url是需要authentication的第一个url。比你传递给.add_password()的url更深的url同样也会匹配。
# 创建密码管理器
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
# 添加用户名和密码.
# 如果知道realm,用它代替None.
top_level_url = "/"
password_mgr.add_password(None, top_level_url, username, password)
handler = urllib2.HTTPBasicAuthHandler(password_mgr)
#创建opener
opener = urllib2.build_opener(handler)
# 打开一个url
opener.open(a_url)
# 安装opener,以后urllib2.urlopen都会用它。
urllib2.install_opener(opener)这是我的个人博客,但我期待你的参与...MSN:(将#改成@)
验证django 用户认证auth模块常见方法使用.
作者:轻舞肥羊 日期:
在用 django 改造某些旧系统的时候,由于原来的用户设计不可能按照django&&的 auth 模块的用户表那样设计的,当然你可以硬扩展成那样,但必须保证不影响别的系统,所以在很多情况下还是保持原来的表结构不变,自己写用户,权限管理这一块. 以前写过一篇自己定义 session 的方式: , 并采用装饰模式来实现django 自身的 @login_required 类似功能。 如果是新开发的应用,如何用django 自身的 装饰方法判断是否登录: 程序代码rom django.shortcuts import renderfrom programm.models import *from django.contrib.auth.decorators import login_requireddef index(request):&&&&&&&&return render(request, 'index.html')@login_requireddef liste(request):&&&&&&&&return render(request, 'liste.html', {'lObj': myModel.objects.all()})在这里直接用 @login_required 来装饰,但是用这种情况的前提是你必须采用 DJANGO的 autho 框架来实现用户管理. 程序代码from django.contrib.auth import authenticate, logindef my_view(request):&&&&username = request.POST['username']&&&&password = request.POST['password']&&&&user = authenticate(username=username, password=password)&&&&if user is not None:&&&&&&&&if user.is_active:&&&&&&&&&&&&login(request, user)&&&&&&&&&&&&# Redirect to a success page.&&&&&&&&else:&&&&&&&&&&&&# Return a 'disabled account' error message&&&&else:&&&&&&&&# Return an 'invalid login' error message.除此之外,还有一些其他的方法:logout(request[, next_page, template_name, redirect_field_name])password_change(request[, template_name, post_change_redirect, password_change_form])password_change_done(request[, template_name])password_reset(request[, is_admin_site, template_name, email_template_name, password_reset_form,token_generator, post_reset_redirect, from_email])password_reset_done(request[, template_name])其用法可以参考如下: 程序代码(r'^change_passwd/$', 'django.contrib.auth.views.password_change', {&&&&'template_name': 'change_passwd.html',&&&&'post_change_redirect': '/',}),(r'^reset_passwd/$', 'django.contrib.auth.views.password_reset', {&&&&'template_name': 'reset_passwd.html',&&&&'email_template_name': 'reset_passwd_email.html',&&&&'post_reset_redirect': '/reset_done/',&&&&'from_email': 'noreply@jihua.in',}),(r'^reset_confirm/(?P&uidb36&[0-9A-Za-z]{1,13})-(?P&token&[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', \&&&&'django.contrib.auth.views.password_reset_confirm', {&&&&&&&&'template_name': 'reset_confirm.html',&&&&&&&&'post_reset_redirect': '/signin/',&&&&}),(r'^reset_done/$', 'django.views.generic.simple.direct_to_template', {'template': 'message.html', 'extra_context': {&&&&'msg': _(u'我们已将一封包含恢复密码步骤的邮件发到了您的邮箱,请查收'),}}),
[本日志由 轻舞肥羊 于
10:56 PM 编辑]
| 查看次数: -
游客发言不需要密码.
禁止表情转换
禁止自动转换链接
禁止自动转换关键字
虽然发表评论不用注册,但是为了保护您的发言权,建议您.

我要回帖

更多关于 authclient认证客户端 的文章

 

随机推荐