2017-08-05 8 views
9

を持っていない私は、この要求から、私のログにエントリをたくさん見ている:SignalR /交渉は/アカウント/ログインしてリクエストをしている - 私はアカウント/ログインエンドポイント

/signalr/negotiate 

エラーは次のとおりです。

The controller for path '/Account/Login' was not found or does not implement IController 

私が認証を必要とするAppHubに接続しているJSクライアントを持っている:

[Authorize] 
[HubName("appHub")] 
public class AppHub : Hub 
{ 
    // content 
} 

これはhappeです有効期限切れのCookieが接続しようとしている 'シグナル'セッションが存在するためです:

  • なぜこのリクエストが自動的にこのページを探しているのかわかりません。私のweb.configやルートなどのどこにも指定されていません。なぜこうなった?
  • 私は、ユーザーが認証されていない場合、signalRクライアントが接続しようとしないようにしたいと考えています。これはどのように達成できますか?これは、すでにここで質問に対するこれらの他の回答に類似していてもよく、これらはあなたのソリューションを提供することができるように見えます
+0

は、許可の失敗によるリダイレクトのように見えます。 – Pawel

+0

@Pawelそうです、はい。 – SB2055

答えて

4

私はあなたの問題を理解していれば、正しく、あなたはAuthorizeAttributeクラスを継承することによって、これを処理するために、独自のカスタムクラスを作成したいとしている。例えばhttps://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute(v=vs.118).aspx

public class MyCustAuthorize : AuthorizeAttribute 
{ 
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      filterContext.Result = new HttpUnauthorizedResult(); 
     } 
     else 
     { 
      //modify this to do whatever you want to happen if unauthorized 
      filterContext.Result = new RedirectResult("/session/noaccess/"); 
     } 

    } 

} 

次にあなたが飾ることができますデフォルトクラスの代わりにカスタムクラスを使用してください (例はmvcコントローラからのものですが、ハブで同じことができるはずです)

[Authorize] 
public class AdminController : Controller 
{ 

はこのようになります。

[MyCustAuthorize] 
public class AdminController : Controller 
{ 

私はそれはあなたの設定ファイル内で定義されていない場合は、それが演出されて理由があるので、/アカウント/ログインフォーム認証のためのデフォルトのパスであると考えています。

は、それはあなたがあなたの認証セクションで、次のloginUrl属性値を配置することによって、探しているものであれば別の方法として、あなたがにリダイレクトするために特定のURLを挿入することができ> web.configファイルに要素を形成します

1

Stackoverflow 1

Stackoverflow 2

あなたはでの接続を停止しようとしたことがあり彼らはもはや許可されていないクライアント?

$.connection.hub.stop(); 
+0

私はハブ全体に[承認]しています(質問を参照)。ユーザは認証されなくなり、signalRクライアントは '再接続 'を試み続け、' Account/Login'への大量のリクエストにつながります。私はこれらの要求を避けようとしています。 – SB2055

+0

クライアントは、再接続タイムアウト内で再接続できない場合は停止する必要があります。 – Pawel

0

アプリはをFormsAuthenticationを使用しているので、それを認可するために失敗したときAuthorize属性は、デフォルトでは、ログインページにリダイレクトされます。

あなたのweb.configファイルに以下を追加することで、これを無効にすることができます

<modules runAllManagedModulesForAllRequests="true"> 
    <remove name="FormsAuthentication" /> 
</modules> 

これは、すべてのデフォルト動作を削除します。

あなたはあなたのためにこれらのデフォルトの動作を追加しているものである

<membership defaultProvider="ClientAuthenticationMembershipProvider"> 
    <providers> 
    <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" /> 
    </providers> 
</membership> 

のように見えるあなたのapp.configで何かを持っているかもしれません。

関連する問題