台灣最大程式設計社群網站
線上人數
2261
 
會員總數:245964
討論主題:189547
歡迎您免費加入會員
討論區列表 >> ASP.NET >> MVC filter allowanonymous 失效了?
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
MVC filter allowanonymous 失效了?
價值 : 10 QP  點閱數:1929 回應數:9
樓主

Wind
門外漢
0 89
1172 146
發送站內信

想問一下,我用filter寫了一個onauth的認證,然後,把他註冊到全域中,目前每一頁都有去判別到,若沒有認證,就會到login的頁面。
但是login的頁面是不用判別的呀,所以我在login的控制器中,加了allownonymous的標籤,但是卻出現了,您沒有權限使用此頁面。
allowanonymous 不是略過onauth的嗎?怎麼會這樣?還是我弄錯了?

在webconfig中我是用表單驗證來做這樣的功能。

搜尋相關Tags的文章: [ allowanonymous失效了 ] ,
本篇文章發表於2014-04-08 22:18
1樓
回應

kevin
檢舉此回應
可否提供你所設定的程式內容,這樣比較好釐清問題。
本篇文章回覆於2014-04-09 01:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

KKBruce
捐贈 VP 給 KKBruce 檢舉此回應
你的 Filter 繼承自?
本篇文章回覆於2014-04-09 10:51
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

Wind
檢舉此回應
我的filter繼承自 AuthorizeAttribute
----Filter
Public Class AuthFilter
Inherits AuthorizeAttribute


Public Overrides Sub OnAuthorization(filterContext As AuthorizationContext)
MyBase.OnAuthorization(filterContext)
FormsAuthentication.SetAuthCookie("admin", True) '建立一個認證
If IsNothing(HttpContext.Current.Session("logpower")) = True Then
filterContext.Result = New HttpUnauthorizedResult()
End If
End Sub

End Class

----FilterConfig
Public Class FilterConfig
Public Shared Sub RegisterGlobalFilters(ByVal filters As GlobalFilterCollection)
filters.Add(New HandleErrorAttribute())
filters.Add(New AuthFilter())
End Sub
End Class

----login 控制器
<AllowAnonymous>
Function Index() As ActionResult
Session.Clear()
Return View()
End Function




本篇文章回覆於2014-04-09 11:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

KKBruce
捐贈 VP 給 KKBruce 檢舉此回應
Filter 是有優先順序的,Global > Controller > Action,所以你註冊至Global,它的優先順序最高,還沒跑到Controller或Action的Filter就已經被你檔下了,這是正常的結果,不是嗎。
本篇文章回覆於2014-04-09 12:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

Wind
檢舉此回應
KKBruce大大,那該怎麼將它排除呢?目前我的做法是在filter中,用route名稱的方式排除,請問有什麼更好的方式嗎?
本篇文章回覆於2014-04-09 14:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
最有價值解答

KKBruce
捐贈 VP 給 KKBruce 檢舉此回應
http://www.davidhayden.me/blog/asp.net-mvc-4-allowanonymous-attribute-and-authorize-attribute

参考他的做法。
本篇文章回覆於2014-04-09 14:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

Wind
檢舉此回應
謝謝,有成功了~~~
本篇文章回覆於2014-04-11 12:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

KKBruce
捐贈 VP 給 KKBruce 檢舉此回應
分享出來給大家,如何 ^^
本篇文章回覆於2014-04-11 13:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

Wind
檢舉此回應
主要是這一段,看是否有AllowAnonymousAttribute這個,然後在不用驗證的地方,加上[AllowAnonymous]這個就好了
if (!filterContext.ActionDescriptor.IsDefined
(typeof(AllowAnonymousAttribute), inherit) &&
!filterContext.ActionDescriptor.ControllerDescriptor.IsDefined
(typeof(AllowAnonymousAttribute), true)) {
// Check for authorization
}
本篇文章回覆於2019-03-26 15:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.