简体   繁体   English

如何在ASP.NET Membership中设置当前用户的电子邮件地址?

[英]How to set the current users email address in ASP.NET Membership?

im trying to set the current users email from within asp.net 我试图从asp.net内设置当前用户的电子邮件

Membership.GetUser().Email = txtEmail.Text;
Membership.UpdateUser(Membership.GetUser(User.Identity.Name));

but the next time i read the current users Email it has not changed 但是下次我阅读当前用户的电子邮件时,它并没有改变

i read it like this 我这样看

Membership.GetUser().Email

The method Membership.GetUser() returns a new user instance. 方法Membership.GetUser()返回一个新的用户实例。 Your first line is changing the Email property, and then proceeds by throwing away that change. 您的第一行是更改Email属性,然后通过丢弃该更改来继续进行。 Your second line will fetch the user again, with the old user, and update it. 您的第二行将与旧用户再次获取用户,并进行更新。

The documentation for Membership.UpdateUser contains an example of updating the email property. Membership.UpdateUser的文档包含一个更新email属性的示例。 It all boils down to passing the same User instance from Membership.GetUser() to Membership.UpdateUser . 归结为将相同的User实例从Membership.GetUser()传递给Membership.UpdateUser

// GetUser() without parameter returns the current logged in user.
MembershipUser u = Membership.GetUser();       
u.Email = email;    
Membership.UpdateUser(u);

This will cause issues if you have a custom MembershipProvider that uses the email field for identification purposes (and you login with email+password), then the user would still have User.Identity.Name equal to the old email until next login (or they get a new Forms-cookie). 如果您有一个自定义MembershipProvider,它将使用电子邮件字段进行标识(并且您使用email + password登录),则这将导致问题,直到下一次登录之前,用户仍然具有与旧电子邮件相同的User.Identity.Name (或者获取一个新的Forms-cookie)。

Something like: 就像是:

MembershipUser u = Membership.GetUser(User.Identity.Name);       
u.Email = email;    
System.Web.Security.Membership.UpdateUser(u);

Looks like you aren't feeding in the current user name to get user. 看起来您不是在输入当前用户名来获取用户。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM