設為首頁收藏本站

艾歐踢論壇

 找回密碼
 立即註冊

QQ登錄

只需一步,快速開始

搜索
熱搜: 活動 交友 discuz
查看: 962|回復: 0
打印 上一主題 下一主題

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

[複製鏈接]
跳轉到指定樓層
樓主
發表於 2016-2-28 11:03:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在围绕 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() 即可!





分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 轉播轉播 分享分享 分享淘帖
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

小黑屋|Archiver|手機版|艾歐踢創新工坊    

GMT+8, 2024-5-16 00:46 , Processed in 0.227487 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表