プロジェクトにSimpleMembershipを実装するのに問題があります。基本的に、ページへのアクセスを制限することに関する情報を見つけることができませんでした。これは私がこれまでに行ったことです:
- default.aspxというログインページがあります。これをweb.configに追加することで、ログインページとしてdefault.aspxを認識するようにSimpleMembershipを構成できました。
<appSettings> <add key="loginUrl" value="default.aspx" /> </appSettings>
- default.aspxにWebMethodがあり、WebSecurity.Loginを介してユーザー資格情報を検証します。私はjqueryajaxを介してWebMethodを呼び出しています:
[WebMethod, ScriptMethod] public static bool Login(string userName, string password) { return SecurityManager.Instance.Login(userName: userName, password: password); }
- jqueryコードのajaxサクセスハンドラーで、保護する必要のある別のページ(home.aspx)にユーザーをリダイレクトしています。
success: function (data, textStatus, jqXHR) { if (data.d) { window.location.href = "home.aspx"; } else { $("#invalidCredentialsBox").css("visibility", "visible"); } },
問題は、home.aspxに直接(ブラウザから)アクセスしようとすると、実際に読み込まれることです。では、ユーザーが正常にログに記録されるまでhome.aspxへのアクセスを制限するためにSimpleMembershipを作成するにはどうすればよいですか?
私がしなければならなかったことは、それが正しい解決策であるかどうかはわかりませんが、app_codeフォルダーに基本クラスを作成することです。クラスはSystem.Web.UI.Pageから継承し、home.aspxをこの基本クラスから継承するように変更しました。基本クラスのコンストラクターで、WebSecurity.IsAuthenticatedプロパティをチェックしており、それがfalseの場合は、Response.Redirectをerror.aspxページに移動します。
namespace MyProject { public class BasePage : System.Web.UI.Page { public BasePage() { if (!SecurityManager.Instance.IsAuthenticated()) { HttpContext.Current.Response.Redirect("error.aspx"); } } } }
このように機能しますが、正しい実装方法ではないと思います。私が見つけたすべての例はMVCを使用していますが、私はそうではなく、実際にはMVCについてほとんど何も知りません。SimpleMembershipが.netWebプロジェクトで使用されているのと同じドキュメント/例を誰かに教えてもらえますか?
また、web.configのappSettingsセクションに追加できるSimpleMembershipに有効な他の属性は何ですか?また、web.configの認証セクションをSimpleMembershipで機能するように設定する方法(MVC 4テンプレートで、SimpleMembershipを使用していても、web.configのフォーム認証セクションを設定していることを確認しました)
ありがとう。