2011-02-07 22 views
1

ショートバージョン:AJAX ASP.NET Membership Authenticationレスポンスを受信した後、2番目のAJAXコールを実行するために同じページに滞在する最善の方法は何ですか?リダイレクトの代わりに認証後にJavascriptを実行

ロングバージョン:ASP.NET MVCで作成されたWebベースのペイントプログラムを想像してみてください。ユーザーは写真を塗りつぶし、その間にユーザーのセッションはタイムアウトしました。ユーザーが「保存」を押すと、AJAXダイアログで「セッションがタイムアウトしました。以下の認証情報を入力してください」というメッセージが表示されます。 (AJAX認証の方法についてはjQuery Forms Authentication with ASP.NET MVCを参照してください)。有効な資格情報を入力すると、そのユーザーは再認証されます。

MVCのデフォルトのログインメソッドシグネチャによって明らかなように一般的に、この時点では、ユーザーは、returnUrlにリダイレクトされます。

public ActionResult LogOn(LogOnModel model, string returnUrl) 

ただし、この場合には、私は同じページに滞在したいと思いますし、代わりに私のハンドラのAJAXコールをSaveArt()にして、ユーザの仕事をデータベースに書き出します。 returnUrlにそれを呼び出すJavascript関数の名前が含まれていますが、クライアントから実行すると思う唯一の方法は恐ろしいevalですが、これは安全ではないようです。このプロセスを完全にAJAXifyする別の方法はありますか?ここでevalを使用して、サーバから返される名前の関数を実行する危険性は何ですか?

答えて

3

ログインを行うためにAjaxリクエストを使用している場合、AccountControllerを変更してRequest.IsAjaxRequest()(または他のいくつかのメソッドの1つ)を使用してアカウントコントローラを検出し、ログインの結果を返しますリダイレクトの代わりにリクエストを送信します。そこから、そのオブジェクトを処理して結果を表示するだけです。

--Amended answer--あなたがする必要がどのような

はあなたがやってみたかったものは何でもして続行する前に、AJAX呼び出しからはResponseCodeをご確認ください..ですjQueryの1.5のAJAX()メソッドは、あなたがすることができます

実際に[Authorize]属性を使用している場合は、401ステータスコードを処理する必要があります。あなたのログインダイアログをどこに表示するのでしょうか。ログインダイアログをインスタンス化すると、SaveArt()関数を再度呼び出すクロージャーでパスします。

うまくいけば、これはあなたにとってより役に立ちます。

+0

は慎重に質問を読んで呼び出します。私はすでに「そのオブジェクトを処理して結果を表示する」方法を知っています。私がよく分からないのは、結果の後に別のJS関数を呼び出す方法です。基本的に、 'Save'クリックハンドラは必要に応じてAJAXを介してログインし、次にアートを保存するための2番目のAJAXメソッドを呼び出します。その関数名が元のクリック時にのみ知られている場合、ログインレスポンスハンドラは 'Save'をどのように呼び出すべきでしょうか? – ChessWhiz

+0

私は良い気持ちになりましたが、「ユーザーは「保存」とAJAXダイアログが表示され、「承認済み」とタグ付けされたアクションのセッションが失われた結果を既に処理していたことを示しています。私は確かにその解決策があなたが探していたものであると誤解しました。私は代わりにあなたが望むものの後半だけを与えました。答えを修正する。 –

+0

これは役に立ちます、ありがとう。しかし、この解決策では、AJAXリクエストごとにカスタムエラーハンドラが必要です。そのうち、 'Save'はただ一つです。 'CallWithAuthentication(Save)'のようにpreauthを一つの関数呼び出しにリファクタリングする方法はありますか?これはヘルパーで、必要に応じて認証し、パラメータとして受け取った関数ポインタを実行します。この問題は、ログイン成功ハンドラが、サーバがそれを返さない限り、 'Save'関数ポインタパラメータにアクセスする際に問題があることが原因です。 – ChessWhiz

2

「チャド・ルペルト」の答えは正しいです。しかし、あなたが理解できない場合は、以下のようにしてください。

1)私は、おそらくあなたは、検証の結果を知っているAJAX呼び出しの応答で)ユーザー名ⅱ)パスワードIII)コールバック関数

2)PARAMTER と認証のためのAJAX呼び出しを行うJavaScript関数を宣言user/psdが正しいかどうか。検証がスルーだ場合

3)その後、コールバック関数 (コールバック関数はノッティングですが、あなたのSAVEは、())

+0

これは、ありがとうございました。 – David

関連する問題