• 主页
  • ASP
  • .NET Framework
  • Web Services
  • VB
  • VC
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • LINQ
idoiknow 2013年04月01日
快来拿分了,很简单的问题,MVC使用ActionFilterAttribute特性时怎样重新进行身份验证(FormsAuthentication).
事情是这样的,我的服务端是MVC架构,每个Controller上面都有一个 [AuthorizeFilter] ,这样Action执行之前会先进入AuthorizeFilter中的OnActionExecuting方法进行过滤处理:
 public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.User.Identity.IsAuthenticated)
{
//...自定义的一些权限判断
}
}

现在问题是,由于SWFUpload上传控件在Firefox浏览器中的一个bug,服务端获取不到".ASPXAUTH"这个Cookie信息, 导致服务端判断IsAuthenticated==false , 这样我的上传动作就被判定为身份验证失败,被挡在了外面。

想必是OnActionExecuting之前,FormsAuthentication有一个更早的验证动作把IsAuthenticated置为false了。

我现在用了一个办法可以把这个缺少的".ASPXAUTH"信息给传到服务端,页面初始化上传控件时,把那个缺失Cookie放在控件的配置信息中
    post_params: {
,"ASP.NET_SessionId": sessionInfo //CUSTOM_ASPSESSID
,".ASPXAUTH": authInfo

在if(IsAuthenticated)判断的外面,通过Request.Params就可以得到,但这时候IsAuthenticated已经是false没法更改.

得到 Request.Params中的".ASPXAUTH"信息后,把它写入Response.Cookies集合里面,页面再次上传时,OnActionExecuting中Identity.IsAuthenticated就是true的。

但这是不够的,不能每次人家上传都要先出错一次才能真正开始上传吧?

我想问有什么办法能在第一次上传时,我得到了".ASPXAUTH"后,让这个FormsAuthentication重新执行一次吗?
...全文
224 点赞 收藏 4
写回复
4 条回复

还没有回复,快来抢沙发~

发动态
发帖子
.NET技术社区
创建于2007-09-28

4.8w+

社区成员

66.8w+

社区内容

.NET技术交流专区
社区公告
暂无公告