DNN登录 - 门户重定向

时间:2014-09-16 15:51:23

标签: c# .net dotnetnuke

我在查明DNN是否有能力将正在验证的用户重定向到同一站点内不同门户网站上的URL时遇到了一些麻烦。

例如,假设我有PortalA和PortalB,以及只能访问PortalB的User1。但是,我确实希望允许用户尝试使用PortalA的Login页面,以及一些逻辑来确定在登录过程中或之后需要将用户定向到PortalB。因此,如果User1访问站点PortalA.com并尝试登录,我希望User1最终得到验证并登录到PortalB,并登陆PortalB的主页。

查看PortalSettings对象,我尝试了PortalId和进入UserController.ValidateUser和UserController.UserLogin方法的PortalName,但这对两个门户的任何重定向没有帮助。我还看了一下用于获取RedirectURL的不断变化的HomeTabId变量,似乎将其更改为主页的Id不起作用 - 因为HomeTabId在当前门户之外,Globals.NavigateURL( )没有给我指向我想要重定向到的正确门户网站的URL。

我还试图在验证对于预期的门户网站成功时跳过OnUserAuthenticated事件,然后调用UserLogin方法然后尝试使用带有正确URL的Response.Redirect(Globals.NavigateURL())重定向,但这似乎也没有起作用(我被困在同一页面上)。

此外,如果登录的用户可以访问这两个门户,则需要能够在PortalA或PortalB的登录页面上确定。如果他们确实可以访问这两个门户,那么用户就可以选择(从列表,下拉等)他们想要访问的Portal。然后,根据需要,用户可以根据需要继续访问PortalA或PortalB的PortalA或PortalB的登录页面。我想如果先前的要求可以解决,那么这应该很容易解决。

以防万一,有业务规则要求我们确实需要单独的门户网站。每个门户都具有门户特定功能,业务逻辑引擎和导航菜单。

我确实看了一下:以及Chris H.的回复,但提供的答案还不足以解决我的问题(我们正在使用DNN社区版,而且我已经设置了用户他们有权访问的门户网站。

编辑:这些门户网站位于同一个域中。所以,它看起来像portal1.mydomain.com和portal2.mydomain.com。

EDIT2:我正在考虑在尝试验证和登录用户之前进行门户重定向。但是,我需要弄清楚如何在两个门户网站上传输敏感的用户登录信息 - 我我不确定是否暂时尝试在会话中继承数据是可行的,因为它们跨越两个门户网站。我已经注意到,如果我使用User1登录PortalA然后将URL更改为PortalB,即使User1可以访问这两个门户,我也必须再次登录。尝试在登录步骤之前进行门户重定向是一种合理的方法,还是应该在事后进行?

1 个答案:

答案 0 :(得分:0)

自从我发布了似乎可以解决要求的问题以来,这就是我所做的。

首先,我创建了一个数据库表来保存正在重定向的用户的登录令牌。然后,我创建了一个中间页面,上面有一个模块,用于检查令牌并将用户重定向到登录页面。使用此中间页面,因为我将查询字符串上的用户名和标记GUID传递给要处理的中间页面。中间页面确定用户此时应该去的位置。

因此,假设User1属于PortalB,并且正在尝试登录PortalA: 在PortalA上,User1经过身份验证,他们不是超级用户,因此获取了他们的门户列表。 User1被称为在PortalB上,因此为User1创建了一个到期令牌,然后将它们发送到PortalB的中间页面(PortalB-np)。 在PortalB-np上,获取令牌GUID和用户名的查询字符串值,并与在DB中找到的令牌进行比较。如果令牌尚未过期并且IP地址与令牌的创建者匹配,则在将会话中的用户名存储后,我将它们重定向到PortalB的登录页面(PortalB-lgn)。用户永远不会看到此页面。 在PortalB-lgn上,我在加载时检查该会话变量,如果找到它,立即删除该会话值并通过ASP.NET成员身份获取用户密码来登录该用户。

有些注意事项: 如果尝试手动到达没有查询字符串值的中间页面,则会将用户重定向到他们正在访问的同一门户的登录页面。这几乎是即时的。 如果尝试在查询字符串上提供登录令牌和用户名,则仍会尝试获取令牌,但很可能会失败,因为数据库中没有用于该用户名,门户和IP地址组合的相应令牌到期的短时间框架。因此,它们也将被引导回登录页面。这几乎是即时的。

对于用户可以访问多个门户网站的情况,我检查不同的门户网站计数,如果它不止一个,则假设该用户对他们可以访问的门户网站列表中的第一个门户网站进行身份验证(因为它是全部或者无论如何,他们应该能够访问该列表中的任何门户网站)。如果身份验证成功,请提示下拉,以便用户选择要访问的门户。如果选择与当前门户匹配,则只需进行正常登录,否则执行如上所述的重定向。

如果对此实施有任何其他想法,我想听听它们 - 但这似乎对我现在有用。