重定向到登录页面策略

时间:2009-05-21 16:50:07

标签: asp.net-mvc

我在页面上有一个链接,允许用户在登录时执行某项操作。如果他们没有登录,我希望链接首先将他们引导到登录页面。这很常见。最好的方法是什么?目前我这样做但我不喜欢它:

<% if(Model.IsUserAuthenticated){ %>
<%= Html.ActionLink("Start Puzzle", "StartPuzzle", "Puzzles")%>
<%} else { %>
<%= Html.ActionLink("Start Puzzle", "Login", "Account")%>
<%} %>

你明白了。我不喜欢像这样在视图中使用逻辑。如果没有登录,那么让“StartPuzzle”动作重定向会更好吗?

4 个答案:

答案 0 :(得分:2)

创建htmlhelpers扩展方法,该方法将检查用户是否经过身份验证并返回一个或另一个链接......如下所示:

在您看来

<%=Html.RenderLoginLink()%>

并在你的htmlhelper:

if(autorized)
{ 
   return Html.ActionLink("Start Puzzle", "StartPuzzle", "Puzzles");
}
else
{
   return Html.ActionLink("Start Puzzle", "Login", "Account");
}

答案 1 :(得分:1)

视图中的那么多逻辑非常好,IMO。但是如果有更多,或者你甚至不想那么多,那么你可以为登录和匿名用户提供两个单独的视图,并决定你将在控制器中显示哪一个。或者有一个视图,并根据条件从控制器传递链接文本和URL。

答案 2 :(得分:1)

以下是Rob Conery关于使用属性Authentication and Redirect

进行身份验证的一篇好文章

答案 3 :(得分:1)

在控制器的StartPuzzle操作之上放置“Authorize”属性。这样,未经过身份验证的用户将自动被重定向到登录页面,其中returnUrl指向他未登录时访问的内容。这样,在成功登录后,他将被重定向回拼图开始