登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

高级菜鸟

积累并顺便分享AI,启动技术,C#,ASP.net等知识的地方

 
 
 

日志

 
 

解决DNN无法登陆的问题  

2011-03-28 23:27:41|  分类: Dotnetnuke |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
大家也许看了我之前的一篇文章讲述如何定制DNN登陆页面的文章: 如何定制登陆页面,  然后尝试新建一个页面测试一下, 最后也许误删了该页面的Account Login模块(登陆模块)而导致了你的站点无法登陆, 这时我们怎么回滚这些设置呢? 遗憾的是, DNN并没有对此类问题提供什么好的操作界面或解决方案, 最后还得我们这些DNN Fans(Developer)来挖掘问题的出路和解决方案. 我想大家第一想到方案应该就是直接暴力修改数据库了, 对, 我想在此能分享的也就是暴力解决方案, 其中的原理很简单, 因为DNN默认登陆Url一般可通过这样得到http://yourwebsite/default.aspx?ctl=login (也是原始url, 没有任何Url Rewrite, 如果你深入研究会发现这一页面或是首页或是当前页面), 如果你按照我前边文章定制了登陆页面的话, 那无非就是Portal 的属性LoginTabId 修改为新的页面的TabID( 比如 100, 231), 这时当你点击登陆链接时DNN将根据站点设置跳转到对应的页面, 仔细研读下列代码可知其中奥秘:
  1. If PortalSettings.LoginTabId <> -1 And Request.QueryString("override"Is Nothing Then  
  2.         ' user defined tab   
  3.         Response.Redirect(NavigateURL(PortalSettings.LoginTabId, """returnurl=" & ReturnUrl), True)   
  4. Else  
  5.         ' portal tab   
  6.         If PortalSettings.HomeTabId <> -1 Then  
  7.             Response.Redirect(NavigateURL(PortalSettings.HomeTabId, "Login""returnurl=" & ReturnUrl), True)   
  8.         Else  
  9.             Response.Redirect(NavigateURL(PortalSettings.ActiveTab.TabID, "Login""returnurl=" & ReturnUrl), True)   
  10.         End If  
  11.     End If  
  12. End If  
好, 现在你应该也知道如何解决了吧, 有两种方式(都不是独创的, 直接Copy过来, 本着分享的原则, 详细请看相关链接):

1) 如果你有数据库权限, 那就执行这一SQL语句:
  1. Update Portals Set LoginTabId=NULL Where PortalId=xx /* xx代表你站点对应的PortalID, 一般是0 */  
最后记得清一下缓存(重启IIS或"修改"Web.config或其他类似方式)

2) 复制下面的代码,另存为 resetlogin.aspx

<%@ Page Language="c#" AutoEventWireup="false" %>
<%@ Import Namespace="DotNetNuke.Entities.Portals"%>
<%@ Import Namespace="DotNetNuke.Data"%>
<%@ Import Namespace="DotNetNuke.Common.Utilities"%>
<%
   PortalSettings portalSettings = (PortalSettings)HttpContext.Current.Items["PortalSettings"];
   //build a query to update DB
   string sql = String.Concat("Update {databaseOwner}{objectQualifier}Portals Set LoginTabId=NULL Where PortalId=", portalSettings.PortalId);
   DataProvider.Instance().ExecuteScript( sql );
   // clear portal settings
   DataCache.ClearPortalCache(portalSettings.PortalId, true);
   Response.Redirect("default.aspx?ctl=login");
%>

 resetlogin.aspx 上传到站点根目录下, 然后通过Url访问这一文件(http://yourwebsite/resetlogin.aspx )将自动更新Portal的LoginTabID为null, 从而达到回滚原始设置的目的, 最后记得把这一文件删除了。
  评论这张
 
阅读(1963)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018