当前位置: 首页 > 知识库问答 >
问题:

如何从UserProfile获取自定义信息?

白驰
2023-03-14

我在UserProfile中添加自定义字段UserType作为字符串。我想更改我的login post方法,从UserType获取值,并将该值传递到TempData中。

这是我在AccountController上的代码:

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
        public ActionResult Login(LoginModel model, string returnUrl)
    {
        if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
        {
            var context = new UsersContext();
            var currentUser = Membership.GetUser(User.Identity.Name);
            string username = currentUser.UserName;
            var user = context.UserProfiles.SingleOrDefault(u => u.UserName == username);
            var userType = user.UserType;

            TempData["UserType"] = user.UserName; //Taking UserType from User Profile to validate in _Layout
            return RedirectToLocal(returnUrl);
        }

        // If we got this far, something failed, redisplay form
        ModelState.AddModelError("", "The user name or password provided is incorrect.");
        return View(model); 
    }

我对该方法进行了调试,以下是我掌握的信息:

> **On WebSecurity.Login()** I can see the UserName and Password.
> **Var CurrentUser**  I can't get the value from User.Identity.Name
> **string Username** This error is displayed *Object reference not set to an instance of an object*. Application crash.

有人对此有什么解决办法吗?我是ASP. NET的新手,但也许如果我实现自定义成员资格,它会工作,你觉得呢?你能给我一些例子吗?谢谢你们。

解决方案如下:

`[HttpPost][AllowAnonymous][ValidateAntiForgeryToken]公共操作结果登录(登录模型,字符串返回URL){if(ModelState.IsValid

        TempData["UserType"] = user.UserName; //Taking UserType from User Profile to validate in _Layout
        return RedirectToLocal(returnUrl);
    }

    // If we got this far, something failed, redisplay form
    ModelState.AddModelError("", "The user name or password provided is incorrect.");
    return View(model); 
}`

共有1个答案

夏季萌
2023-03-14

这只是一个想法,以防我无法评论我的声誉,为什么你不直接使用模型。用户名而不是使用var currentUser=Membership。GetUser(User.Identity.Name)

这背后的原因是,任何登录的人都将是它自己的当前用户,您可以从数据库中检索它的详细信息。

更新了

你可以用

UserProfile User = udb.UserProfiles.Where(m => m.UserName == model.UserName).FirstOrDefault();
var userType=User.UserType; // this brings your UserType from database

// then you can use this as
TempData["UserType"]=userType;

希望这对你有帮助!

 类似资料:
  • 但是,我只能访问有关用户的基本信息,例如GivenName和Surname。我在Azure门户中创建了名为“extension_e3f9d0....”的扩展属性。 问题是,我不知道如何访问属性,一旦用户登录。当我调用Postman中的API时,可以检索这些自定义属性,如下所示: https://graph.microsoft.com/v1.0/users/[user@whatever]?$sele

  • 有没有办法通过自定义网址(使用Youtube API)来获取Youtube频道的频道ID? 例: 自定义网址如下所示: https://www.youtube.com/onepiece 我想获取它的通道ID,以便我有这样的链接: www.youtube.com/user/OnePieceUK

  • Iam使用这个API->https://www.boredapi.com/API/activity,所以Iam用Java创建一个程序,但是当我从上面的API检索数据时,像这样-> 我在控制台->中获得此输出

  • 问题内容: 好的,简单的问题,但对我来说很重要。 因此,其他android客户端正在发送此xml消息: 我的听众大致是这样的: 在这种情况下,我想在“ received”元素标签内获取属性“ id”的值。但是我在日志中看到的是这样的: 那么我如何获得“ HVgQw-5”? 更新 其实有些奇怪……我从我的SMACK调试中收到了xmlordinh,如下所示: 但是当我执行message.toXML时,

  • 问题内容: 我有一个配置有注释的资源服务器,它通过参数引用授权服务器,如下所示: 授权服务器/用户端点返回其扩展名,例如带有电子邮件: 每当访问某些资源服务器端点时,Spring都会通过调用授权服务器的/user端点来验证幕后的访问令牌,并且实际上会获取丰富的用户信息(其中包含例如电子邮件信息,我已经使用Wireshark进行了验证)。 所以问题是,如何在不显式第二次调用授权服务器端点的情况下获取

  • 问题内容: 如何从 自定义 相册中获取 所有图像 ? __ 该代码块仅获取其中一些。谢谢。 -> 的类型是 问题答案: 对于Swift 4 使用这个答案为自己编辑了一点。 对于Swift 2.1