ASP.NET MVC 3 使用身份验证

2024-04-04

如何使用 FormsAuthentication 保存某些内容?我不想通过 URL 存储用户 ID。

例如,现在我有这样的代码:

//UserController class:
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
  if (repository.ValidateUser(model.Login, model.Password))
  {
    FormsAuthentication.SetAuthCookie(model.Login, model.RememberMe);
    if (Url.IsLocalUrl(returnUrl))
    {
      return Redirect(returnUrl);
    }
    else
    {
      return RedirectToAction("Project", "Index");
    }
  }
  else
  {
     ModelState.AddModelError("", "Incorrect name or password.");
  }
}

return View(model);
}

ProjectController class:

public ViewResult Index()
{
    return View(repository.GetUserProjects(
        this.ControllerContext.HttpContext.User.Identity.Name));
}

ProjectRepository:

ProjectsContext context = new ProjectsContext();
UsersContext uCnt = new UsersContext();

public IEnumerable<Project> GetUserProjects(String username)
{
    if (String.IsNullOrEmpty(username))
        throw new ArgumentNullException("username", "Login is empty");
    return this.uCnt.Users
               .FirstOrDefault(u => u.Login == username)
               .Projects
               .ToList();
}

ProjectController 和 ProjectRepository 看起来不像好的代码...也许有人可以提供建议,如何在不使用 URL 的情况下存储 UserID?我认为最好的方法是在自动授权时保存 ID。我在 User.Identity 中没有找到任何属性来执行此操作...

UPD

抱歉,我忘了说我正在使用带有 Razor 视图的 MVC-3。 而且 UserId 不是一个字符串(User.Identity.Name 是一个字符串),它可能是 GUID 或者可能是我自己的对象......


当用户登录时,将 UserID 保存在授权 cookie 中 FormsAuthentication 票证的 UserData 属性中:

string userData = userID.ToString();

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, user.Email,
    DateTime.Now, DateTime.Now.AddMinutes(FormsAuthentication.Timeout.TotalMinutes),
    createPersistentCookie, userData);
string hashedTicket = FormsAuthentication.Encrypt(ticket);

HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashedTicket);
HttpContext.Current.Response.Cookies.Add(cookie);

您可以在 Global.asax 的 PostAuthenticateRequest 方法中读回它:

HttpCookie formsCookie = Request.Cookies[FormsAuthentication.FormsCookieName];

if (formsCookie != null)
{
    FormsAuthenticationTicket auth = FormsAuthentication.Decrypt(formsCookie.Value);

    Guid userID = new Guid(auth.UserData);

    var principal = new CustomPrincipal(Roles.Provider.Name, new GenericIdentity(auth.Name), userID);

    Context.User = Thread.CurrentPrincipal = principal;
}

请注意,在本例中,CustomPrincipal 派生自 RolePrincipal(尽管如果您不使用 Roles,我认为您需要从 GenericPrincipal 派生),并且只需添加 UserID 属性并重载构造函数。

现在,无论您在应用程序中需要 UserID,您都可以执行以下操作:

if(HttpContext.Current.Request.IsAuthenticated)
    Guid userID = ((CustomPrincipal)HttpContext.Current.User).UserID;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC 3 使用身份验证 的相关文章

  • MVC 3 Razor,具有自定义标记/部分的助手

    我什至不确定这是否可行 但我想我会检查一下是否有任何方法可以使这变得更容易 首先 我的网站中有一些重复的标记 如下所示 div class module h3 Title h3 div p Information goes here p d
  • 在 MVC3 应用程序中使用具有表单身份验证的 Oracle 数据库

    我编写了一个简单的 MVC3 应用程序 并遵循了有关如何设置经过身份验证的用户的教程 本教程使用 SQL Server Express 数据库 是否可以使用 Oracle 数据库代替 SQL Server 这只是更改 web config
  • 使用 MVC3 RTM 进行 Ninject

    我已将 MVC3 从 RC2 升级到 RTM 我们使用的是 Ninject 2 1 0 76 但升级后就停止工作了 因此 我使用 NuGet 管理器获取最新的 Ninject Ninject MVC3 和 Ninject Web Mvc 库
  • ASP.Net MVC 3、Ninject 和 Quartz.Net - 如何?

    我现在使用 Ninject 2 2 1 4 与我的 MVC3 一起使用 我成功配置了 Ninject 与它一起运行 但我不知道如何使 Ninject 在我的 MVC3 中与 Quartz Net 一起运行 有人可以帮忙吗 创建一个使用 Ni
  • UIHint 不使用 EditorTemplate

    我有一个这样的模型 public class MyModel ScaffoldColumn false public int CharityId get set UIHint Charities public SelectList Char
  • ASP.Net MVC 3,复杂对象和延迟加载

    首先 我是 ASP Net MVC 3 的新手 而且我也在使用 EF 4 1 我有一个复杂的对象 类似于包含类别对象的产品对象 所以我们有 Product CategoryId Product Category 和一些额外的属性 我还有一个
  • 如何使用多重身份验证 - firebase?

    我有一个注册屏幕 其中包含 用户名 电子邮件 电话号码 密码 在本例中 我使用电话号码身份验证来验证号码 因此在用户验证他的号码后 我将他的数据保存到 firebase DB 中 所以在那之后 我将下摆导航到登录屏幕 应该包含电子邮件 密码
  • 每 4 个循环新表行

    如何在 Razor 视图中每 4 个循环创建一个新表行 这是为 4 之前的每个数字创建一个新行 然后停止创建新行 int i 0 foreach var item in ViewBag ProgramIdList if i 4 0 tr t
  • 具有实体框架的 MVC 控制器的 T4 模板 - 主机的成员属性 (MvcTextTemplateHost)?

    有谁有我可以在 MVC 3 附带的 T4 模板 ControllerWithContext tt 中使用的 Host 对象成员的完整引用吗 我已经尝试了我能想到的所有谷歌搜索 但唯一相关的结果是这个页面 http blogs msdn co
  • 确定用于映射网络驱动器的域和用户名

    使用带有 SP1 的 Windows 7 Enterprise 但我希望得到适用于 Windows XP 2003 2008 Vista 7 的通用答案 从命令提示符处 我执行net use命令将 Z 驱动器映射到另一台计算机上的共享 但我
  • Firebase GAS webapp Google 弹出窗口消失

    我正在尝试升级我的 firebase GAS web 应用程序 之前我有一个弹出窗口 可以让用户使用 Google 登录 我不确定我做错了什么 但我已经升级到新的 firebase 现在正在尝试使用新的代码格式进行相同的登录 发生的情况是
  • 在 React Native 应用程序中哪里可以获取 EXPO DEBUG 值?

    当我尝试登录 expo 时出现此错误 exp Set EXPO DEBUG true in your env to view the stack trace 你知道我到底要在哪里设置值吗EXPO DEBUG EXPO DEBUG是一个环境变
  • IsReusable 属性中的上下文切换

    是否可重用属性 下面是我的理解IsReusable财产 如果处理程序返回静态内容 将值设置为 true 是安全的 但如果线程返回动态内容 为了使其线程安全 IsReusable应设置为 false 在这种情况下 可能会发生上下文切换 这可能
  • 免费 PHP 登录库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Asp.net Identity 注销其他用户

    我正在使用 Asp net Identity 来验证用户身份 并尝试从管理端锁定任何用户 但是当我锁定任何在线用户时 它并没有注销 我读过很多关于我的问题的评论 但它们都不起作用 我尝试使用 UserManager UpdateSecuri
  • 我可以使用passport-google回调来验证android/ios用户吗?

    我有一个使用 google passport oauth2 进行身份验证的 node js 服务器 我的服务器端代码看起来像这样文档 https www npmjs com package passport google oauth2 au
  • 使用 AFNetworking 重置基本身份验证凭据

    我正在编写一个 REST 客户端 使用 AFNetworking 并且需要能够在应用程序的单个实例中触发新会话的创建 换句话说 我想 1 通过服务器进行身份验证2 进行一些 REST 调用3 模拟 注销 4 重新与服务器进行身份验证5 进行
  • 混合 ASP.NET WebForms 和 MVC 授权

    我正在尝试将一些 MVC3 功能混合到现有的 WebForms 应用程序中 我遵循了一些指南 除了授权部分之外 一切都已设置完毕并正常工作 现有的应用程序有
  • 使用 Mechanize (Ruby) 进行基本身份验证和表单身份验证

    我正在尝试登录公司内部网上的一个站点 该站点具有基本身份验证弹出对话框和基于表单的身份验证 这是我正在使用的代码 导致 401 gt Net HTTPUnauthorized 错误 require rubygems require mech
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取

随机推荐

  • 检测数组中唯一值的数量

    我正在寻找一种有效的方法来检测数组中唯一值的数量 我目前的做法 快速排序整数数组 然后运行循环来比较元素 In code yearHolder for I 0 to High yearArray do begin currYear year
  • Symfony EasyAdminBundle 3 覆盖 createIndexQueryBuilder()

    EasyAdminBundle 文档上说 例如 index 操作调用名为 createIndexQueryBuilder 的方法来创建用于获取索引列表上显示的结果的 Doctrine 查询构建器 如果您想自定义该列表 最好重写 create
  • 使用 CometD Java 客户端发布消息,供 Javascript 订阅者使用

    我有一个使用 CometD 的 Java Web 应用程序 工作流程很简单 我定义了一个服务 该服务在接收通道 service hello 上的消息时起作用 该服务需要一个参数 name 在此基础上 它创建了一个名为 message get
  • 检测C# Windows窗体应用程序的启动路径

    我想知道 C 2 0 Windows 窗体应用程序的应用程序启动路径 一种方法是Application StartupPath 还有其他方法可以找到应用程序的启动路径吗 AppDomain CurrentDomain BaseDirecto
  • 得到组与星号的匹配?

    如何获取带星号的群组的内容 例如 我想删除一个逗号分隔的列表 e G 1 2 3 4 5 private static final String LIST REGEX d d private static final Pattern LIS
  • iPhone 4 用户代理是什么?

    有人找到 iPhone 4 浏览器的用户代理字符串了吗 Mozilla 5 0 iPhone U CPU iPhone OS 4 0 like Mac OS X en us AppleWebKit 532 9 KHTML like Geck
  • Angular - 子组件可以引用父组件的模板变量吗?

    我正在使用 primefaces primeng 组件开发 Angular 4 应用程序 p contextmenu 我试图告诉子元素使用父组件的模板变量 应用程序 html div div
  • 如何自定义垫选择选项组以允许角度中的嵌套值

    我正在自定义角度材质选择 自动完成以允许嵌套下拉菜单 在这里 我想要一个包含多个孩子的家长下拉菜单 如果我展开特定的父下拉列表 则只有该下拉列表的子项应该展开或折叠 同样 在同一场景中也应选择复选框事件 我面临两个问题 搜索 自动完成不起作
  • jhipster 使用 prod 配置文件运行嵌入式 jar - liquibase 问题

    我已经将我的应用程序打包为 mvn Pprod 包 然后我跑了 java jar myapp 0 0 1 SNAPSHOT war 效果很好 但如果我跑 java jar myapp 0 0 1 SNAPSHOT war spring pr
  • 检测 DOM 中的变化

    我想在 html 中添加一些 div 或输入时执行一个函数 这可能吗 例如 添加一个文本输入 然后应该调用该函数 迄今为止的终极方法 代码最少 IE11 FF Webkit Using 变异观察者 https developer mozil
  • 如何消除警告LNK4221?

    我正在使用 c windows 表单 Visual Studio 2010 开发一个项目 我们有 4 个项目 1 个包含 GUI Windows 窗体 托管代码 的项目 这是 exe 项目 其他3个项目 非托管代码 并且都是静态库 在这 4
  • Java中易失性变量和普通变量的显示区别

    我正在尝试创建一个示例来显示易失性变量和常用变量之间的区别 例如 package main public class TestVolatile extends Thread public int l 5 public volatile in
  • UITableView reloadData 不重新加载

    我很困惑为什么 reloadData 不重新加载 tableview 它不调用numberOfRowsInSection The fetchedResultsController将新数据保存到核心数据后确实获得新行 在将新数据添加到表视图之
  • Java - 易失性的使用仅在多处理器系统中有意义?

    易失性的使用仅在多处理器系统中才有意义 这是错误的吗 我正在尝试学习线程编程 所以如果你知道任何好的文章 pdf 我喜欢提到一些关于操作系统如何工作的东西 而不仅仅是语言的语法 否 挥发性可用于多线程应用程序 它们可能会也可能不会在多个处理
  • 将 javascript 字符串转换为 html 对象 [重复]

    这个问题在这里已经有答案了 我可以将字符串转换为 html 对象吗 喜欢 string s div div var htmlObject s toHtmlObject 这样我以后就可以通过 id 获取它并对其样式进行一些更改 var ho
  • 如何在CKEditor激活时在HTML5文本区域中显示占位符属性?

    我在 HTML5 网站中有一个文本区域 具有适当的占位符 示例文本 属性 在我通过 CKEditor 添加 RichText 支持之前 它显示得很好 CKEditor GUI 正在重新创建文本区域 并且不显示其中的占位符文本 有没有办法在
  • 使用foreignObject使用D3js动态添加SVG

    working
  • 如何将文本放入可绘制对象中?

    我正在尝试动态创建一个可绘制对象 以用作自定义线性布局的背景 它需要有哈希标记之类的 没什么大不了的 而且还需要有数字来标记哈希标记的内容 就像一把尺子 我知道我可以创建文本元素并将它们放入线性布局中 然后将哈希标记放入可绘制对象中 但我希
  • extjs 树面板上下文菜单不起作用

    var menu1 new Ext menu Menu items text Open in new tab var treePanel Ext create Ext tree Panel id tree panel region cent
  • ASP.NET MVC 3 使用身份验证

    如何使用 FormsAuthentication 保存某些内容 我不想通过 URL 存储用户 ID 例如 现在我有这样的代码 UserController class HttpPost public ActionResult LogOn L