Sep
24
Written by:
host
9/24/2010 3:47 AM
"暴力"解决DNN无法登陆的问题
大家也许看了我之前的一篇文章讲述如何定制DNN登陆页面的文章: 如何定制登陆页面, 然后尝试新建一个页面测试一下, 最后也许误删了该页面的Account Login模块(登陆模块)而导致了你的站点无法登陆, 这时我们怎么回滚这些设置呢?
大家也许看了我之前的一篇文章讲述如何定制DNN登陆页面的文章: 如何定制登陆页面, 然后尝试新建一个页面测试一下, 最后也许误删了该页面的Account Login模块(登陆模块)而导致了你的站点无法登陆, 这时我们怎么回滚这些设置呢? 遗憾的是, DNN并没有对此类问题提供什么好的操作界面或解决方案, 最后还得我们这些DNN Fans(Developer)来挖掘问题的出路和解决方案. 我想大家第一想到方案应该就是直接暴力修改数据库了, 对, 我想在此能分享的也就是暴力解决方案, 其中的原理很简单, 因为DNN默认登陆Url一般可通过这样得到http://yourwebsite/default.aspx?ctl=login (也是原始url, 没有任何Url Rewrite, 如果你深入研究会发现这一页面或是首页或是当前页面), 如果你按照我前边文章定制了登陆页面的话, 那无非就是Portal 的属性LoginTabId 修改为新的页面的TabID( 比如 100, 231), 这时当你点击登陆链接时DNN将根据站点设置跳转到对应的页面, 仔细研读下列代码可知其中奥秘:
- If PortalSettings.LoginTabId <> -1 And Request.QueryString("override") Is Nothing Then
-
- Response.Redirect(NavigateURL(PortalSettings.LoginTabId, "", "returnurl=" & ReturnUrl), True)
- Else
-
- If PortalSettings.HomeTabId <> -1 Then
- Response.Redirect(NavigateURL(PortalSettings.HomeTabId, "Login", "returnurl=" & ReturnUrl), True)
- Else
- Response.Redirect(NavigateURL(PortalSettings.ActiveTab.TabID, "Login", "returnurl=" & ReturnUrl), True)
- End If
- End If
- End If
好, 现在你应该也知道如何解决了吧, 有两种方式(都不是独创的, 直接Copy过来, 本着分享的原则, 详细请看相关链接):
1) 如果你有数据库权限, 那就执行这一SQL语句:
- Update Portals Set LoginTabId=NULL Where PortalId=xx /* xx代表你站点对应的PortalID, 一般是0 */
最后记得清一下缓存(重启IIS或"修改"Web.config或其他类似方式)
2) 下载这一压缩包(
OpenSesame.zip), 解压到站点根目录下, 然后通过Url访问这一文件(
http://yourwebsite/OpenSesame.aspx )将自动更新Portal的LoginTabID为null, 从而达到回滚原始设置的目的, 最后记得把这一文件删除了 :)
上面的文章是从网上看到的,个人认为不是很好的解决办法;其实我们只要找到登录模块的login.ascx文件,把它作为控件注册到皮肤里面去,马上就可以登录了;你只需要在你所使用的皮肤ascx文件中添加以下代码,即可登录
<%@ Register TagPrefix="dnn" TagName="MYLOGIN" Src="~/DesktopModules/Admin/Authentication/Login.ascx" %>
<dnn:MYLOGIN runat="server" id="dnnMYLOGIN" />
(注:以上代码适合dnn5.*版本;早期版本login.ascx文件位置不同,找到即可)