Asp.net mvc 如何在不登录的情况下访问链接
谁能给我这个问题或文章的解决方案,关键字: 一个用户创建一个产品,并且后端将发送邮件供管理员批准该产品,此邮件包含以下链接: 我想管理员不需要登录系统,并可以访问此链接 因为Global.asax检查cookie中的当前代码:Asp.net mvc 如何在不登录的情况下访问链接,asp.net-mvc,Asp.net Mvc,谁能给我这个问题或文章的解决方案,关键字: 一个用户创建一个产品,并且后端将发送邮件供管理员批准该产品,此邮件包含以下链接: 我想管理员不需要登录系统,并可以访问此链接 因为Global.asax检查cookie中的当前代码: protected void Application_PostAuthenticateRequest(Object sender, EventArgs e) { HttpCookie ck = Request.Cookies[FormsAuthenticatio
protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
{
HttpCookie ck = Request.Cookies[FormsAuthentication.FormsCookieName];
if (ck != null && !String.IsNullOrEmpty(ck.Value))
{
FormsAuthenticationTicket fat = FormsAuthentication.Decrypt(ck.Value);
UserProfile profile = JsonConvert.DeserializeObject<UserProfile>(fat.UserData);
MyPrincipal myPrincipal = new MyPrincipal(profile.Username);
myPrincipal.UsrProfile = profile;
HttpContext.Current.User = myPrincipal;
}
}
--成功访问后,我打算加密此链接。但是上面的步骤不起作用。。
谢谢你的帮助 我们有一个类似的应用程序,用户请求访问我们的文档成像系统,然后向我们的应用程序管理员发送电子邮件以获得批准。总体思路如下:
[HttpPost]
public ActionResult RegisterNewUser(NewUser model)
{
if (ModelState.IsValid)
{
var pwSalt = repository.CreateSalt();
var newUser = User();
newUser.Username = model.Username;
newUser.Email = model.Email;
newUser.PasswordSalt = pwSalt;
newUser.Password = repository.CreatePasswordHash(model.Password, pwSalt);
newUser.IsApproved = false;
newUser.RegisterDate = DateTime.Now;
db.Users.Add(newUser);
db.SubmitChanges();
ConfirmationEmail(model.Username);
return RedirectToAction("RegistrationSuccess");
}
}
上面的代码是一个刚注册我们应用程序的新用户的post操作。它将用户添加到db表中。该模型包含名称、用户名、电子邮件等字段。我还有一个CreatePasswordHash函数,它使用用户的密码和生成的SALT创建加密密码。需要注意的一点是,Users表包含一个IsApproved列,默认设置为false。如果此值未更改为true,用户将无法使用该应用程序。在这个操作中有另一个名为confirmationmail的函数,我们在该函数中向其中一个管理员发送电子邮件以获得批准
public void ConfirmationEmail(string username)
{
var user = db.Users.Single(u => u.Username == username);
string mailBody = "A new user requires approval for document imaging.\n\n"
+ "Name: " + user.Name + "\n\n"
+ "\n\n"
+ "If you approve, follow the link below: \n\n"
+ "http://example.com/Imaging/Account/Approval/" + user.UserId;
MailMessage msg = new MailMessage();
msg.Priority = MailPriority.High;
msg.To.Add(admin@example.com);
msg.Subject = "New User registration approval";
msg.Body = mailBody;
msg.IsBodyHtml = false;
SmtpClient smtp = new SmtpClient();
smtp.Send(msg);
msg.Dispose();
}
上面的函数从原始注册操作中获取一个username参数,我们使用它来查找用户记录注意:Users表中的username是唯一的列,因此如果它不是唯一的,则验证将失败。我使用纯文本创建电子邮件正文,并附加审批操作的URL,供管理员确认审批。其他一切都是标准邮件代码SMTP设置存储在my web.config文件中
客户控制员-批准操作:
public ActionResult Approval(int id)
{
var user = db.Users.Find(id);
user.IsApproved = true;
db.SubmitChanges();
EmailApproval(id);
return View(user);
}
将IsApproved标志更改为true的简单操作,这将授予用户对应用程序的访问权限。返回的视图包含在一个漂亮的确认窗口中显示的基本用户信息。最后,还有一个函数EmailApproval,它向用户发送一封关于被批准的电子邮件。它使用与上述其他功能相同的电子邮件发送实践
希望这有帮助。您可以使操作不安全,这将帮助您通过IP地址实现此操作的安全性 在这种情况下,您需要实现自己的授权过滤器读取并检查它是否是从预定义管理员的IP调用的,并且该调用是本地使用的,以便进行检查 坦白地说,我从来不会在我的项目中做一些不安全的事情,所以在做类似的事情之前,你必须三思而后行
另一方面,您可以延长会话超时。例如,您可以在chrome的调试器中看到此cookie吗?