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 使用身份验证 的相关文章

  • Unity IoC 和 MVC 3 Beta - 将 IRepository 传递给控制器​​构造函数

    MVC 3 中有什么变化吗 我已经尝试了互联网上所有将 Unity 设置为我的 IoC 容器的示例 但我不断收到错误消息 指出 Unity 无法解析我的 UserController 这是我的 UserController 上的构造函数 p
  • Ajax.BeginForm 无法与 Html.ValidationSummary 一起使用

    我正在尝试使用 Ajax BeginForm 将数据发布到控制器 如果出现特定错误 表单应重新呈现并显示添加到 ModelState 的自定义错误消息 由于某种原因 错误消息未显示 我什至正在尝试以下不起作用的测试用例 我是否遗漏了什么 E
  • nginx代理认证拦截

    我有几个服务 它们支持 nginx 实例 为了处理身份验证 在 nginx 中 我拦截每个请求并将其发送到身份验证服务 在那里 如果凭据正确 我将设置一个包含用户相关信息的 cookie 现在 请求应该被路由到适当的服务 并设置 cooki
  • MVC3 和实体框架

    我的问题很简单 将 edmxMVC3 项目的 Web 应用程序的模型文件夹中的文件吗 我的答案非常简单 不要用数据访问逻辑和数据建模搞乱表示层 整个 MVC 应用程序 Visual Studio 解决方案中从下到上至少有 4 个项目 1 P
  • 如何在单个 Razor 视图中编辑多个模型

    我是 MVC3 的新手 我有多个模型 例如BussinessDetails ContactPerson ServiceArea Address以及更多型号 我有一个单一的视图页面 其中共享视图页面如Contacts BusinessDeta
  • ASP.NET MVC4 CustomErrors DefaultRedirect 被忽略

    我有一个 MVC 4 应用程序 使用自定义 HandleErrorAttribute 仅处理自定义异常 我想拦截默认的 404 和其他非 500 错误页面 并用更有吸引力的内容替换它们 为此 我将以下内容添加到我的 Web config 中
  • Sencha Touch 和远程服务器上的身份验证

    我希望收到您关于使用 PhoneGap 和 Sencha Touch 的应用程序以及带有 Active Directory 的 NET 服务器的身份验证机制的反馈 因此 我们需要在移动设备上存储用户凭据 以便用户每次希望使用该应用程序时都不
  • ServiceStack自定义用户身份验证

    有谁有一个关于如何按照本建议使用 int RefId 的实际示例question https stackoverflow com questions 11117469 how can i extend servicestack authen
  • 创建新控制器时出现错误:“不支持的上下文类型”

    我将使用 ASP NET MVC3 Linq to Sql 类 而不是实体框架 MS SQL Server 2008 pro 而不是 Express ed 来实现 MvcMusicStore 我从那里得到了教程mvcmusicstore c
  • 在 Rails 3 中选择性地关闭 Devise 的 Flash 通知

    Devise 身份验证框架在各处都使用 Flash 通知 这使得与应用程序集成变得很容易 但有时会导致用户体验不佳 我想知道有什么简单的方法可以有选择地关闭 Rails 3 应用程序中的一些 Devise flash 通知 特别是 我想摆脱
  • 为什么要调用base.OnActionExecuting(filterContext);?

    我只是在看我的一些旧代码 我有一个动作过滤器 OnActionExecuting 方法 最后我有 base OnActionExecuting filterContext 为什么到处搜索我都看到这个很多次了 我还看到 在我的旧授权标签中 我
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • 在哪里可以找到 OpenID 提供商 URL 列表? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我已经在我的网站上实现了 OpenID 但我很难找到 OpenID 提供商 URL 列表 我以为这很容
  • SQLite CreateDatabase 不支持错误

    我将 Entity Framework 4 2 CF 与 SQLite 一起使用 但是当我尝试启动该应用程序时 出现 提供商不支持 CreateDatabase 错误 这是我的模型映射 protected override void OnM
  • 在 ASP.NET 中,是否有因 Windows 身份验证登录失败而触发的事件? (记录 Windows 身份验证失败的详细信息)

    我正在构建一个 NET 4 0 ASP NET MVC 3 Intranet 应用程序 该应用程序以集成模式在 IIS 7 5 上运行 Windows 身份验证用于管理对网站的访问 Windows 身份验证模块已启用 所有其他身份验证模块均
  • 如何使用 Error.cshtml 视图中的过滤器放入 ViewBag 的数据?

    我有一个操作过滤器 负责将一些通用信息放入 ViewBag 中 供共享 Layout cshtml 文件中的所有视图使用 public class ProductInfoFilterAttribute ActionFilterAttribu
  • OutputCache 因复杂对象属性而异

    我有一个控制器操作 它接收一个复杂对象作为参数 我需要 OutputCache 根据该复杂对象的属性之一而变化 这可能吗 如何 如果你有一个像这样的模型 public class person public string Name get
  • 复杂对象MVC3的JSON序列化

    我有一个问题 我似乎不知道如何序列化类型的对象 public class SchedulingCalendarMonth public List
  • java ee - 使用 servlet 对用户进行身份验证

    我刚刚开始学习java 还没有接触过java ee 我需要使用 servlet 来验证用户身份 请提供示例代码和技术文献 谢谢你 创建一个接受用户名 密码的 html 表单 将这些数据发布到 servlet 在 doPost 中读取这些数据
  • 如果用户在 Laravel 中经过身份验证,如何检查 Vue 组件?

    正如标题所述 我有点困惑如何根据用户是否登录并使用 Laravel 的 Auth 外观进行身份验证 使用 if else 语句处理 Vue 组件中的方法 我正在发出各种 Axios 请求 我需要根据用户是否登录来允许 禁止这些请求 我有 V

随机推荐

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

    我正在寻找一种有效的方法来检测数组中唯一值的数量 我目前的做法 快速排序整数数组 然后运行循环来比较元素 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