0

やあ、

エンドユーザーがアカウントを作成できるASP.NETMVCWebサイトを入手しました。ただし、最初にログインするときに同意を与える必要があります。同意しない場合は、ログインしている間、このサイトの他のWebページにアクセスできないようにする必要があります。

これは可能ですか?もしそうなら、どのように?

4

2 に答える 2

1

簡単な方法は、カスタムの承認属性を作成することです。以下のauthorize属性は、ユーザーが認証および承認されているかどうかを確認します。承認されている場合は、db呼び出しを行ってユーザーが確認されているかどうかを確認し、プライベート変数isNotConfirmedをtrueに設定していない場合はfalseを返します。

HandleUnauthorizedRequestで、認証の理由を確認する必要があります。失敗し、確認されていないことが原因である場合は、ユーザーを確認ページにリダイレクトできます。

public class CustomAuthorize : AuthorizeAttribute
  {
    bool isNotConfirmed = false;

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {      
      if (base.AuthorizeCore(httpContext))
      {
        //if the user is not confirmed set isNotConfirmed true and return false;
        isNotConfirmed = true;

        // else return true;
      }

      return false;
    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
      if (isNotConfirmed)
      {
        filterContext.Result = new RedirectResult("/Confirm");
      }
      else
      {
        base.HandleUnauthorizedRequest(filterContext);
      }
    }
  }
于 2012-06-13T02:32:06.477 に答える
0

これを行う最も簡単な方法は、ASP.Netメンバーシップおよびプロファイルプロバイダーを使用することです。

メンバーシッププロバイダーは、ユーザーを管理するためのすぐに使用できるインフラストラクチャ(パスワード、パスワードのリセットなど)を提供します。

プロファイルプロバイダーを使用すると、ユーザーがメンバーシップ契約に署名したかどうかのフラグなど、ユーザーに関する情報を保存できます。

ユーザーがログインしたら、プロファイルプロバイダーをチェックして、メンバーシップ契約に署名しているかどうかを確認します。そうでない場合は、適切なページにリダイレクトします。

アップデート

あなたのコメントに基づいて、あなたは以下を行うことができます:

ログインコントローラを編集する

[HttpPost]
[AllowAnonymous]
public ActionResult Login(LogOnModel model, string returnUrl)
....
if (!userHasSignedTheAgreement)
{
    return RedirectToAction("Account", "ViewToAcceptAgreement");
}
else if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
    && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
    return Redirect(returnUrl);
}
else
{
    return RedirectToAction("Index", "Home");
}
....

契約に署名したら、ConfirmedUserなどの追加の役割に割り当てます。

次に、アクセスが制限されているコントローラーで、次を追加します。

[Authorize(Roles = "ConfirmedUser")]

この属性により、コントローラーを使用するには、ユーザーがConfirmedUserロールに属している必要があります。

于 2012-06-12T19:33:50.890 に答える