admin 發表於 2016-2-28 11:03:01

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

在围绕 Discuz 进行二次开发是,很多场景都要求用户权限,即登录后才允许进行相关操作,操作结束后还需要登出系统以确保安全性。

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

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

1.1 登录代码实例
require libfile('function/member');
$result = userlogin($_GET['username'], $_GET['password'], '', '', '', $_G['clientip']);
$uid = $result['ucresult']['uid'];
1.2 userlogin 参数
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 返回值
Array
(
    => Array
      (
             => chenyuan@lystrong.com
             => e6879336e671bca2ca9c1695ba0a2eee
             => Mark.Chen
             => 1
      )

    => Array
      (
             => 1
             => chenyuan@lystrong.com
             => Mark.Chen
             => 40e0f1de77045975ca9e1e5a85ea6d1c
             => 0
             => 0
             => 0
             => 0
             => 1
             => 1
             => 0
             =>
             => 1431400690
             => 152
             => 0
             =>
             => 0
             => 0
             => 0
             => 1
             => 0
             => 0
             => 0
      )

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

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

2、登出
登出相对简单,使用函数 clearcookies() 即可!





頁: [1]
查看完整版本: Discuz!X 二次开发如何处理用户登录和登出