首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.net MVC 4全局授权筛选器强制在AllowAnonymous操作上登录

ASP.net MVC 4全局授权筛选器强制在AllowAnonymous操作上登录
EN

Stack Overflow用户
提问于 2013-03-04 23:54:07
回答 3查看 13.9K关注 0票数 19

在我的.NET MVC4中,我添加了一个全局过滤器来保护我的控制器。这是使用以下命令完成的:

代码语言:javascript
复制
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
   filters.Add(new HandleErrorAttribute());
   filters.Add(new System.Web.Mvc.AuthorizeAttribute());
}

它是从我的Global.cs类调用的。

我的Web.config文件包含一个标准配置:

代码语言:javascript
复制
<authentication mode="Forms">
     <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>

我的登录操作使用[AllowAnonymous]进行装饰,以便允许匿名用户登录。

到目前为止一切都很好,一切正常。以下是我的登录操作:

代码语言:javascript
复制
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
    ViewBag.ReturnUrl = returnUrl;
    return View();
}

现在,我想添加一个重置密码页面,就像登录页面应该对匿名用户可用一样。我创建了我的操作(在登录操作的同一个控制器下),并用[AllowAnonymous]装饰它:

代码语言:javascript
复制
[AllowAnonymous]
public ActionResult ResetPasswordForUser(string message = "")
{
    ViewBag.message = message;
    return View();
}

然后创建相应的视图。

我将此链接添加到我的登录页面:

代码语言:javascript
复制
@Html.ActionLink("Forgot your password?", "ResetPasswordForUser", "Account")

在运行时,当我使用匿名用户单击此链接时,我会转到ResetPasswordForUser操作,但在返回视图时,会调用Login操作,并且我永远不会真正转到所需的视图。由于某些原因,即使我在使用AllowAnonymous装饰,我的请求也会被截获。

我是不是漏掉了什么?

提前感谢

Update1:

根据Darin Dimitrov添加我的ResetPasswordForUser视图的请求:

代码语言:javascript
复制
@using TBS.Models
@model TBS.ViewModels.ResetPasswordForUserViewModel

@{
    ViewBag.Title = "Reset Password";
}

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)

    <table class="edit-table rounded bordered" style="width: 400px">
        <tr>
            <td class="label-td">
                @Html.LabelFor(m => m.Username)
            </td>
            <td>

                @Html.TextBoxFor(m => m.Username)
                @Html.ValidationMessageFor(model => model.Username)
            </td>
        </tr>
        <tr>
            <td class="label-td">
                @Html.LabelFor(m => m.Password)
            </td>
            <td>
                @Html.Password("Password")
                @Html.ValidationMessageFor(model => model.Password)
            </td>
        </tr>
        <tr>
            <td colspan="2" style="text-align: center">
                <input type="submit" value="Reset" />
            </td>
        </tr>
    </table>
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-29 05:29:44

ResetPasswordForUser视图使用的_Layout文件是否可能正在调用控制器中的操作(例如,在菜单中?)还没有用AllowAnonymous装饰过的?

这将导致这种类型的行为。

票数 11
EN

Stack Overflow用户

发布于 2013-03-18 12:01:53

听起来您可以在布局中使用非匿名@Html.Action或Html.RenderAction,这会导致您的页面重定向到登录。

编辑:删除了旧答案,因为它是不正确的,对任何来看它的人都没有用。

票数 3
EN

Stack Overflow用户

发布于 2013-03-24 10:19:16

我不知道添加全局授权筛选器是否与AllowAnonymous冲突。我设置项目的方法是拥有一个在控制器级设置了Authorize属性的Base Controller。

我的所有控制器都继承自这个BaseController,除了需要匿名访问的控制器,通常是我的AccountController和我的MarketingController。它们只是从Controller继承而来,然后我可以在Action级别设置Authorize。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15205545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档