请选择 进入手机版 | 继续访问电脑版

Bacysoft.cn

 找回密码
 邀请注册
查看: 4819|回复: 1

Discuz!X 二次开发如何处理用户登录和登出

[复制链接]
发表于 2015-10-23 21:10:07 | 显示全部楼层 |阅读模式
在围绕 Discuz 进行二次开发是,很多场景都要求用户权限,即登录后才允许进行相关操作,操作结束后还需要登出系统以确保安全性。

以下分别介绍登录和登出的具体操作方法。

1、登录
登录流程:
a,前端页面通过表单将用户名、密码提交到后台对应模块,然后调用函数 userlogin 处理用户提交的用户名和密码,返回值是一个数组;
b,如果用户名密码验证成功,则数组中保存了用户的相关信息,可以通过 uid 值来判断是否登录成功,uid > 0 则表示登录成功,uid 值即用户在 UCenter 中的 ID 号。
c,如果用户名密码验证失败,则 uid 值小于0,且不同的负值表示不同的错误类型。
d,接着还需要 setloginstatus 函数设置用户登录状态,最后根据需要跳转到指定的页面。

1.1 登录代码实例
  1. require libfile('function/member');
  2. $result = userlogin($_GET['username'], $_GET['password'], '', '', '', $_G['clientip']);
  3. $uid = $result['ucresult']['uid'];
复制代码
1.2 userlogin 参数
  1. function userlogin($username, $password, $questionid, $answer, $loginfield = 'username', $ip = '')
复制代码
$username,用户名/邮箱/UID
$password,用户密码
$questionid,用户设置的验证问题ID
$answer,用户设置的验证问题对应的答案
$loginfield,username 参数的类型,默认是 username,还可以是 uid,email 或者 auto,如果是 auto,将自动按 UID、E-mail、用户名的顺序逐一去匹配。
$ip,登录时用户的IP地址

1.3 userlogin 返回值
  1. Array
  2. (
  3.     [ucresult] => Array
  4.         (
  5.             [email] => chenyuan@lystrong.com
  6.             [password] => e6879336e671bca2ca9c1695ba0a2eee
  7.             [username] => Mark.Chen
  8.             [uid] => 1
  9.         )

  10.     [member] => Array
  11.         (
  12.             [uid] => 1
  13.             [email] => chenyuan@lystrong.com
  14.             [username] => Mark.Chen
  15.             [password] => 40e0f1de77045975ca9e1e5a85ea6d1c
  16.             [status] => 0
  17.             [emailstatus] => 0
  18.             [avatarstatus] => 0
  19.             [videophotostatus] => 0
  20.             [adminid] => 1
  21.             [groupid] => 1
  22.             [groupexpiry] => 0
  23.             [extgroupids] =>
  24.             [regdate] => 1431400690
  25.             [credits] => 152
  26.             [notifysound] => 0
  27.             [timeoffset] =>
  28.             [newpm] => 0
  29.             [newprompt] => 0
  30.             [accessmasks] => 0
  31.             [allowadmincp] => 1
  32.             [onlyacceptfriendpm] => 0
  33.             [conisbind] => 0
  34.             [freeze] => 0
  35.         )

  36.     [status] => 1
  37. )
复制代码

通过返回值的信息就可以轻松判断登录是否成功。

1.4 设置用户登录状态,设置登录状态后,在状态有效期内访问其他业务均无需再次登录。
  1. if ($uid > 0) {
  2.         setloginstatus($result['member'], $_GET['cookietime'] ? 2592000 : 0);
  3. } else {
  4.         echo ("Login Failed!"); exit;
  5. }
复制代码
setloginstatus 函数的第一个参数为 userlogin 函数返回数组中的 member 字段的值,第二个参数是状态的有效期的秒数,例如 2592000 表示30天。

2、登出
登出相对简单,使用函数 clearcookies() 即可!
 楼主| 发表于 2015-11-8 22:25:58 | 显示全部楼层
补充:需要注意的是,在使用 setloginstatus 后,应该使用 dheader() 立即刷新当前页面,已使登录状态生效!
您需要登录后才可以回帖 登录 | 邀请注册

本版积分规则



阿里云|腾讯云|联系方式|Bacysoft.cn ( 京ICP备08000958号-1 )

GMT+8, 2019-10-19 10:27 , Processed in 0.016822 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表