【问题标题】:Page reachable if user connected or not.如果用户连接与否,页面可访问。
【发布时间】:2014-09-14 07:30:42
【问题描述】:

我目前正在使用 MVC5 和 Identity 开发一个网站。

我有一个页面,当用户连接(使用帐户)时可以访问,但当他没有连接时也可以访问。如果他已连接,我想显示一些信息。

如果他没有连接,我想显示更少的信息,我想邀请他登录。

我不知道如何实现这样的页面。我有这个控制器:

   [Authorize]
    public class PController : Controller
    {
        private int UserId;

        public ActionResult Index(int userId ) {
            UserId = Convert.ToInt32(((ClaimsIdentity) User.Identity).FindFirst("test").Value);
            PModel model = new PModel(UserId);
            return View(model);
        }
    }   

还有我的模特:

公共类 PModel { 公共 int 用户 ID { 获取;放; }

public PModel(int userId) {

    ........
    }

在这两种情况下,我都想调用Index方法,并根据模型中的连接进行处理:

  public PModel(int userId) {
      if(userConnected) {

         } else {

         }
  }

我不知道这是否可能。

【问题讨论】:

    标签: asp.net asp.net-mvc-5 asp.net-identity


    【解决方案1】:

    您不会在模型中执行此操作(通常)。如果您想使用 ASP.net 附带的默认表单身份验证模型,您需要在 web.config 中设置它并提供适当的登录/注销操作等。在配置中,您有如下内容:

    <authentication mode="Forms">
       <forms loginUrl="~/Account/LogOn" timeout="30" name=".MySite" protection="All"/>       
    </authentication>
    

    如果用户未通过身份验证,您的操作中的Authorize 属性将停止该方法中的代码运行。如果用户没有登录就直接进入您网站的页面,表单身份验证代码会将用户重定向到您的 web.config 中指定的“loginUrl”。


    根据您的评论,我误读了您的问题。然后,您需要完全删除 Authorize 属性,并且您可以根据控制器中的 Request.IsAuthenticated 属性设置模型 userConnected 属性。

    【讨论】:

    • 感谢您的回答。我不想直接重定向用户。即使他没有经过身份验证,他也可以查看我的页面;只是页面中的信息会有所不同。我只想要一页,但内容不同,具体取决于用户是否经过身份验证。
    猜你喜欢
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 2016-08-13
    相关资源
    最近更新 更多