如何在MVC ASP.NET Identity 2.0中添加模拟

时间:2014-09-05 08:20:13

标签: asp.net asp.net-identity-2

我想知道如何在mvc identity 2.0上添加用户模仿,我看到有些人使用这个:

FormsAuthentication.SignOut();
FormsAuthentication.SetAuthCookie(user.UserName, false);

这对我不起作用,甚至不签出我用的:

AuthenticationManager.SignOut() 

那么我如何继续这样做我有管理面板列出用户的内容,我得到userId或userName,我到底要做什么?我从来没有使用过索赔,所以我不太了解它我不需要回复用户他们现在可以退出。

2 个答案:

答案 0 :(得分:0)

以下是其他任何人遇到此问题的解决方案 -

var user = _db.AspNetUsers.Single(a => a.Id == id);

var impersonatedUser = UserManager.FindByName(user.Email);

var impersonatedIdentity = UserManager.CreateIdentity(impersonatedUser, DefaultAuthenticationTypes.ApplicationCookie);

AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = false }, impersonatedIdentity);

答案 1 :(得分:0)

感谢您提出这个问题,因为它帮助我找到了许多解决方案,包括您和@trailmax。经过一番思考之后,我采用了另一种方式,因为我只需要更改一些声明来进行模拟。我将此称为半模仿,因为它只是改变了一些事情,而不是完全改变用户。

像trailmax一样,我写了blog post on my approach所有代码。下面我总结了它的工作原理。

  1. 我添加了一个会话cookie,其中包含我需要在当前用户中更改的模拟信息,以允许他们访问属于另一个用户的信息。我的情况是我有一些数据的关键。

  2. 然后我使用新的MVC的5 AuthenticationFilter OnAuthentication方法来a)寻找模拟cookie。如果它找到它,那么它改变了当前ClaimsPrincipal中的声明,然后过滤器将通过应用程序传播。

  3. 通过删除Cookie来实现模拟模式,您可以通过将其过期日期设置为之前的日期来实现。

  4. 这些好处是对访问级别的更多控制,但它在所有情况下都不会起作用。在my article中,我将我的方法与@ trailmax的方法进行了比较,以显示每个实现的好处。