<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>单点登录 on 冯威的博客</title><link>https://fwhyy.com/tags/%E5%8D%95%E7%82%B9%E7%99%BB%E5%BD%95/</link><description>Recent content in 单点登录 on 冯威的博客</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Fri, 01 Apr 2011 00:00:00 +0800</lastBuildDate><atom:link href="https://fwhyy.com/tags/%E5%8D%95%E7%82%B9%E7%99%BB%E5%BD%95/atom.xml" rel="self" type="application/rss+xml"/><item><title>Asp.Net站点整合Discuz论坛实现同步注册和单点登录</title><link>https://fwhyy.com/2011/04/aspnet-site-integration-discuz-bbs-sync-reg-and-sso/</link><pubDate>Fri, 01 Apr 2011 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2011/04/aspnet-site-integration-discuz-bbs-sync-reg-and-sso/</guid><description>&lt;p&gt;最近在一个小站中整合了Discuz论坛，查阅了些资料后实现了同步注册和单点登录。&lt;/p&gt;
&lt;p&gt;Discuz是以虚拟目录的方式加载网站中，整合Discuz到网站中进行安装要注意一下几个问题：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201292105539.webp" alt="2011-04-01_163915" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Discuz所在的目录需要添加NETWORK SERVICE 和IIS_User这两个账户的权限。&lt;/li&gt;
&lt;li&gt;Discuz根目录下的DNT.config文件需要修改，将&lt;Forumpath&gt;/&lt;/Forumpath&gt;修改为&lt;Forumpath&gt;/BBS/&lt;/Forumpath&gt;，BBS为虚拟目录的名称。&lt;/li&gt;
&lt;li&gt;由于我网站用了第三方的控件，在webconfig文件中进行了相关设置，然后在访问论坛时提示缺少程序集的引用，后来把第三方控件的dll加到Discuz下的bin目录中得以解决。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下面说说怎样实现同步注册和单点登录&lt;/p&gt;
&lt;p&gt;其实在研究后发现很简单，当然我现在做的只是同域的情况下，跨域的情况还没研究，估计也不会很难，应该只是多了一个设置cookieDomain的过程。Discuz给我们提供了一个DiscuzToolkit的工具包，提供了很多API供调用，下面就一步步来吧。&lt;/p&gt;
&lt;p&gt;1 安装好Discuz论坛后，进入后台管理，选择扩展-》通行证设置-》添加整合程序设置&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;应用程序名称：可以随便输入&lt;/li&gt;
&lt;li&gt;应用程序Url地址：我填写的是我站点的地址&lt;/li&gt;
&lt;li&gt;登录完成后返回地址：同上&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2 记下生成的APIKey和密匙，在后面的代码编写中会用到&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2011/2011-04-01_164204.webp" alt="2011-04-01_164204" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;3 我将APIKey，密匙都配置在了webconfig文件中&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201292106145.webp" alt="2011-04-01_164509" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;APIKey：value值为后台生成的APIKey&lt;/li&gt;
&lt;li&gt;Secret：value值为后台生成的密匙&lt;/li&gt;
&lt;li&gt;Url：value值为BBS的路径&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;4 写一个公共的BBSHelper类，将添加用户，登录，改密码等方法封装在里面。注意要引用命名空间Discuz.Toolkit&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;/// &amp;lt;summary&amp;gt;
/// 同步Discuz论坛帮助类
/// &amp;lt;/summary&amp;gt;
public class DiscuzBBSHelper
{
 private string _apiKey = string.Empty;
 private string _secret = string.Empty;
 private string _url = string.Empty;
 DiscuzSession _ds;

 public DiscuzBBSHelper()
 {
 _apiKey = ConfigHelper.APIKey();
 _secret = ConfigHelper.Secret();
 _url = ConfigHelper.Url();
 _ds = new DiscuzSession(_apiKey, _secret, _url);
 }

 /// &amp;lt;summary&amp;gt;
 /// 登录
 /// &amp;lt;/summary&amp;gt;
 public void Login(string userName,string pwd)
 {
 int uid = _ds.GetUserID(userName);
 _ds.Login(uid, pwd, false, 100, &amp;#34;&amp;#34;);
 }

 /// &amp;lt;summary&amp;gt;
 /// 登出
 /// &amp;lt;/summary&amp;gt;
 public void Logout()
 {
 _ds.Logout(&amp;#34;&amp;#34;);
 _ds.session_info = null;
 HttpContext.Current.Session[&amp;#34;AuthToken&amp;#34;] = null;
 }

 /// &amp;lt;summary&amp;gt;
 /// 创建用户
 /// &amp;lt;/summary&amp;gt;
 public void AddUser(string userName,string pwd)
 {
 _ds.Register(userName, pwd, &amp;#34;&amp;#34;, false);
 }

 /// &amp;lt;summary&amp;gt;
 /// 修改密码
 /// &amp;lt;/summary&amp;gt;
 public void ChangePWD(string userName,string oldPWD,string newPWD)
 {
 int uid = _ds.GetUserID(userName);
 _ds.ChangeUserPassword(uid, oldPWD, newPWD, newPWD, &amp;#34;&amp;#34;);
 }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;5 在网站需要的地方调用该类中的方法即可，如下：&lt;/p&gt;</description></item></channel></rss>