DNN登录-门户重定向
本文关键字:重定向 -门 登录 DNN | 更新日期: 2023-09-27 18:22:14
我很难弄清楚DNN是否有能力将正在验证的用户重定向到同一网站内不同门户网站上的URL。
例如,假设我有PortalA和PortalB,以及一个只能访问PortalB的User1。然而,我确实希望允许用户尝试使用PortalA的登录页面,并使用一些逻辑来确定用户需要在登录过程中或之后被引导到PortalB。因此,如果User1访问网站PortalA.com并尝试登录,我希望User1最终得到验证并登录到PortalB,并登录到Portal B的主页。
查看PortalSettings对象,我尝试了UserController.ValideUser和UserController.UserLogin方法中的PortalId和PortalName,但这对跨两个门户的任何重定向都没有帮助。我还查看了用于获取RedirectURL的HomeTabId变量的变化,似乎将其更改为主页的Id是不起作用的,因为HomeTabId在当前门户Globals.NavigateURL()之外,无法为我提供要重定向到的正确门户的URL。
当验证成功时,我还尝试跳过OnUserAuthenticated事件,然后调用UserLogin方法,然后尝试使用正确的URL使用Response.RRedirect(Globals.NavigateURL())进行重定向,但这似乎也不起作用(我被困在同一页上)。
此外,还需要能够在PortalA或PortalB的登录页面上确定登录的用户是否可以访问这两个门户。如果他们确实可以访问这两个门户网站,则用户可以(从列表、下拉列表等)选择要访问的门户网站。根据需要,用户可以从门户网站a或门户网站B的登录页面继续访问门户网站a和门户网站B。我想,如果之前的需求可以解决,那么这应该很容易解决。
以防万一,有些业务规则规定我们确实需要单独的门户网站。每个门户都具有特定于门户的功能、业务逻辑引擎和导航菜单。
我确实看了一下:和Chris H.的回复,但提供的答案不足以解决我的问题(我们使用的是DNN社区版,我已经为用户设置了他们可以访问的门户网站)。
编辑:这些门户在同一个域上。因此,它看起来像portal1.mydomain.com和portal2.mydomain.com。
第2版:我目前正在考虑在尝试验证和登录用户之前进行门户重定向。然而,我需要弄清楚如何在两个门户之间传递敏感的用户登录信息-我不确定尝试临时传递会话中的数据是否有效,因为它们跨两个门户。我已经注意到,如果我使用User1登录到PortalA,然后将URL更改为PortalB,即使User1可以访问这两个门户,我也必须再次登录。尝试在登录步骤之前进行门户重定向是一种合理的方法吗?还是应该在登录之后进行?
以下是我发布这个问题以来所做的工作,这个问题似乎解决了需求。
首先,我创建了一个数据库表,为被重定向的用户保存登录令牌。然后,我创建了一个中间页面,上面有一个模块,该模块将使用令牌进行检查,并将用户重定向到登录页面。使用这个中间页,因为我将查询字符串上的用户名和令牌GUID传递给要处理的中间页。中间页面决定用户此时应该去哪里。
假设User1属于PortalB,并且正在尝试登录PortalA:在PortalA上,User1是经过身份验证的,他们不是超级用户,因此获得了他们的门户列表。据说User1在PortalB上,因此会为User1创建一个过期令牌,然后将其发送到PortalB的中间页面(PortalBnp)。在PortalBnp上,获取令牌GUID和用户名的查询字符串值,并将其与在DB中找到的令牌进行比较。如果令牌尚未过期,并且IP地址与令牌的创建者匹配,则在会话中存储用户名后,我将它们重定向到PortalB(PortalB-lgn)的登录页面。用户永远看不到此页面。在PortalB lgn上,我在加载时检查该会话变量,如果找到了,请立即删除该会话值,并通过ASP.NET成员身份获取用户密码,使该用户登录。
需要注意的事项:如果尝试在没有查询字符串值的情况下手动访问中间页面,则会将用户重定向到他们正在访问的同一门户的登录页面。这几乎是瞬间的。如果试图在查询字符串上提供登录令牌和用户名,则仍将尝试获取令牌,但很可能会失败,因为在短的到期时间内,数据库中没有该用户名、门户和IP地址组合的相应令牌。因此,他们也将被引导回登录页面。这几乎是瞬间的。
对于用户可以访问多个门户的情况,我会检查不同的门户计数,如果它不止一个,则假设该用户的身份验证是他们可以访问的门户列表中的第一个门户(因为这是要么全有要么全无,他们应该能够访问该列表中的任何门户)。如果身份验证成功,则提示用户下拉选择要访问的门户。如果选择与当前门户匹配,则只需进行正常登录,否则按上文所述进行重定向。
如果对这个实现有任何其他想法,我很想听听——但现在这似乎对我很有用。