ショートバージョン: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
を使用して、サーバから返される名前の関数を実行する危険性は何ですか?
は慎重に質問を読んで呼び出します。私はすでに「そのオブジェクトを処理して結果を表示する」方法を知っています。私がよく分からないのは、結果の後に別のJS関数を呼び出す方法です。基本的に、 'Save'クリックハンドラは必要に応じてAJAXを介してログインし、次にアートを保存するための2番目のAJAXメソッドを呼び出します。その関数名が元のクリック時にのみ知られている場合、ログインレスポンスハンドラは 'Save'をどのように呼び出すべきでしょうか? – ChessWhiz
私は良い気持ちになりましたが、「ユーザーは「保存」とAJAXダイアログが表示され、「承認済み」とタグ付けされたアクションのセッションが失われた結果を既に処理していたことを示しています。私は確かにその解決策があなたが探していたものであると誤解しました。私は代わりにあなたが望むものの後半だけを与えました。答えを修正する。 –
これは役に立ちます、ありがとう。しかし、この解決策では、AJAXリクエストごとにカスタムエラーハンドラが必要です。そのうち、 'Save'はただ一つです。 'CallWithAuthentication(Save)'のようにpreauthを一つの関数呼び出しにリファクタリングする方法はありますか?これはヘルパーで、必要に応じて認証し、パラメータとして受け取った関数ポインタを実行します。この問題は、ログイン成功ハンドラが、サーバがそれを返さない限り、 'Save'関数ポインタパラメータにアクセスする際に問題があることが原因です。 – ChessWhiz