重定向到登录页面策略

问题描述:

我在页面上有一个链接,允许用户在他们登录时执行特定操作。如果他们没有登录,我希望链接先将他们指向登录页面。这很常见。什么是最好的方法来做到这一点?目前我正在这样做,但我不喜欢它:重定向到登录页面策略

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

你明白了。我真的不喜欢在这个视图中有逻辑。如果没有登录,只是让“StartPuzzle”动作重定向会更好吗?

创建htmlhelpers扩展方法,这将检查用户是否被验证,并返回一个链接或另一个......是这样的:在你看来

<%=Html.RenderLoginLink()%> 

和的HtmlHelper:

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

哦,是的,从rob conery的旧规则是:如果你有'如果'在你的看法这就是htmlhelper的地方:) – Marko 2009-05-22 13:33:40

这里是罗布科纳好的帖子关于与MVC使用属性验证:Authentication and Redirect

在视图中多逻辑是完全正常的,海事组织。但是,如果还有更多,或者你不想那么多,那么你可以有两个单独的视图来登录和匿名用户,并决定你要在控制器中显示哪一个。或者有一个视图,并根据条件传递来自控制器的链接文本和URL。

在控制器的StartPuzzle操作顶部放置一个“授权”属性。通过这种方式,未经身份验证的用户将被自动重定向到登录页面,并使returnUrl指向他未登录时访问的内容。这样,在成功登录后,他将被重定向回拼图开始。