gpt4 book ai didi

c# - ASP.NET 成员身份激活用户 - 用户 ID 作为查询字符串

转载 作者:太空宇宙 更新时间:2023-11-03 13:14:46 25 4
gpt4 key购买 nike

我的网站具有 ASP 成员(member)默认提供程序。我想通过带有“激活”页面链接的电子邮件激活新用户。在电子邮件 html 中,我添加了指向“激活”页面的链接,其中包含用户 ID 的查询字符串以激活它。这样做安全吗?它接缝敏感数据,但我可以找到任何替代方案。“激活”页面的代码:

protected void Page_Load(object sender, EventArgs e)
{
//request for signed user UserId
Guid newUserId = new Guid(Request.QueryString["UserId"]);
//get signed user
MembershipUser newUser = Membership.GetUser(newUserId);
//activate signed user
newUser.IsApproved = true;
Membership.UpdateUser(newUser);
}

用户使用电子邮件链接激活帐户后,我在激活页面中有以下代码。我收到“newUser.IsApproved = true;”行的“对象引用未设置到对象的实例”错误。我检查 userId 字符串,它获取用户 Id 字符串并且该字符串不为空。为什么会出现此错误?

    //request for signed user UserId
Guid activationCode = new Guid(Request.QueryString["ActivationCode"]);
string userId = "";

string ConnectionString = ConfigurationManager.AppSettings["myConnectionString"];
try
{
using (SqlConnection sqlConnection = new SqlConnection(ConnectionString))
{
SqlCommand sqlCommand = new SqlCommand("SELECT user_id FROM ActivationCode WHERE activation_code LIKE '%" + activationCode + "%'", sqlConnection);
sqlConnection.Open();
SqlDataReader userIdRdr;
userIdRdr = sqlCommand.ExecuteReader();
while (userIdRdr.Read())
{
userId = userIdRdr["user_id"].ToString();
}
sqlConnection.Close();

MembershipUser newUser = Membership.GetUser(userId);
//activate signed user
newUser.IsApproved = true;
Membership.UpdateUser(newUser);
}
}

最佳答案

您可能遇到的问题是有人可以通过简单地生成激活链接来激活他的帐户,例如:

  1. 用户注册并给定 id,id 可能在网页某处可见(或 url/cookie)
  2. 用户知道他的 id 生成“激活”链接
  3. 在未实际验证电子邮件的情况下激活了用户帐户。

我宁愿生成一个唯一的字符串/guid 并将其与用户 ID 一起存储在数据库中,并使用它来生成激活链接。所以流程应该是这样的:

  1. 用户注册并给定id,生成并存储在数据库中的唯一激活guid/string(token)
  2. 使用激活 token 生成的用户链接
  3. 用户点击链接,使用用户id从数据库中检索激活 token
  4. 用户帐户已激活,用户 token 已删除。

激活页面可能需要登录。

关于c# - ASP.NET 成员身份激活用户 - 用户 ID 作为查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26902833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com