パッシブACを使用してユーザーが自分のアプリケーションにサインオンしたときを検出できるようにするため、アプリを初めて使用する場合はデータベースに追加できます。今はWSFederationAuthenticationModule.SignedInを購読していますが、私は何か不足していると感じています。主にイベントに登録するのに最適な場所がわからないので、PostAuthenticateRequestの内部で作業するようにしましたが、ちょっとハッキリしました。助言がありますか?azure acsとmvc3を使用しているときにユーザーのサインインを検出する最も良い場所は何ですか?
このコードは、Global.asaxのからです
public override void Init()
{
base.Init();
PostAuthenticateRequest += (s, e) =>
{
try
{
FederatedAuthentication.WSFederationAuthenticationModule.SignedIn -= SignedIn;
}
finally
{
FederatedAuthentication.WSFederationAuthenticationModule.SignedIn += SignedIn;
}
};
}
private void SignedIn(object sender, EventArgs e)
{
//do something
}
EDIT:今のところ
は私が唯一SignedInに一度購読を確認するためにフラグ変数を使用するつもりです。誰かが他の提案をしていない限り、サンドリーノの助けを借りて感謝します。ここには私の瞬間があります。
private static bool isFirstRequest = true;
public override void Init()
{
base.Init();
PostAuthenticateRequest += (s, e) => {
if (isFirstRequest)
{
FederatedAuthentication
.WSFederationAuthenticationModule.SignedIn += SignedIn;
isFirstRequest = false;
}
};
}
private void SignedIn(object sender, EventArgs e)
{
//do something
}
EDIT: もう少し情報。この問題は、私が紺碧のエミュレータを使用している場合に発生します。展開されたときに発生する可能性がありますが、試していません。テキストファイルに書き込もうとするとデバッグできず、テキストファイルが作成されていないかどうかをテストしました。
私はそれをやろうとしましたが、WsFederationAuthenticationModuleはアプリケーションの起動時にはnullですが、postauthenticate要求の中で利用できます。私は自分のWebの設定が正しいと思う、私はwsfederationmoduleを追加するために手動でそれを編集しなかっただけで、stsの参照ツールを追加しました。 –
コードサンプルを修正しましたが、アプリケーションの起動時にWSFederationAuthenticationModuleがすぐに使用できないことは事実です。 –
まだ動作しませんでしたが、WsFederationAuthenticationModuleはそのイベントで使用できますが、signedinイベントを購読することは効果がなく、すべてのモジュールのプロパティは空です。おそらく、そこで利用可能なモジュールはちょうど初期値であり、パイプラインをさらに下げると、新しいインスタンスがそれを置き換えます。 global.asaxにフラグ変数を置き、それを使ってsignedinを強制的に一度だけ購読するようにします。新しい方法を反映するために質問を編集します。 –