- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的问题与这个问题密切相关(但是,除非您阅读那里的所有评论和答案,否则您可能无法弄清楚):
Does ASP.NET Identity 2 support anonymous users?
我只是想详细说明或问得更清楚一点。我的问题也是关于这篇关于迁移匿名用户的 Microsoft 文章:
我想最简单的问题是,那篇 MSDN 文章对于在 MVC5 Identity 2.X 中迁移匿名用户是否仍然是最新的/相关的?首先,它提到了这一点:
<authentication mode="Forms" >
<forms loginUrl="login.aspx" name=".ASPXFORMSAUTH" />
</authentication>
但是,在我的 web.config 中,我有这个(这是由我以外的其他人添加的......我假设身份或项目模板。):
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
</modules>
我也在我的 web.config 中使用它,它似乎可以很好地处理匿名用户(它是由我添加的,并在 MSDN 文章中提到):
<anonymousIdentification enabled="true" />
从匿名到 IsAuthenticated
有两种方法,注册或登录。
本质上,无论匿名用户被允许做什么,我都会获取 AnonymousID 并将其放入一个包含相关信息的单独表中(例如 CommentId => AnonymousId)。 (理论上,用户可能已经注册并注销并仍然充当匿名用户......本质上是重复操作,当用户登录时再次迁移数据时需要考虑这一点,这样它就不会创建重复项.)
我引用的这两个链接和其他几篇文章可能都涉及到这个主题,但没有什么是真正清楚或解释清楚的。关于第一段代码,是否有新的认证模式
?我假设我们还没有使用 Forms
是不是错了? MSDN 示例是否仍然有效?将匿名用户迁移到 IsAuthenticated
以及匿名用户可能链接到的任何其他表数据的更好示例(如果可能)或更新的方法是什么?
谢谢。
更新 1(第二天):这是我到目前为止的内容:Global.asax 中的 Profile_OnMigrateAnonymous
仍然会在成功注册和登录事件时触发。示例中添加了注释:
public void Profile_OnMigrateAnonymous(object sender, ProfileMigrateEventArgs args)
{
//Anything regarding this profile stuff appears to not be relevant to Identity...
//... (and no using statements I can find will get rid of the squigglies...
//... Even if I get rid of the Profile error, GetProfile has problems.)
//ProfileCommon anonymousProfile = Profile.GetProfile(args.AnonymousID);
//More Profile stuff and not even relevant to what I'm doing...
//...and appears to be new fields you can add to the SimpleMembership Users table?
//...and also related to the properties you add in your web.config which are also...
//...not related to Identity.
//Profile.ZipCode = anonymousProfile.ZipCode;
//Profile.CityAndState = anonymousProfile.CityAndState;
//Profile.StockSymbols = anonymousProfile.StockSymbols;
////////
//// Delete the anonymous profile. If the anonymous ID is not
//// needed in the rest of the site, remove the anonymous cookie.
//The ProfileManager line just hangs and barks about a network error...
//...but there is no network error (without a doubt)...
//...I have no idea what it would be deleting anyway.
//ProfileManager.DeleteProfile(args.AnonymousID);
//This is the only line that is successful and actually deletes the cookie.
AnonymousIdentificationModule.ClearAnonymousIdentifier();
//// Delete the user row that was created for the anonymous user.
// Except that no user was written to any user rows...
// ...Therefore, I didn't even bother trying this next line.
//Membership.DeleteUser(args.AnonymousID, true);
}
如您所见,在该 msdn 示例中,只有一行似乎与 Identity 一起工作(...一般来说,cookie 似乎也与 Identity 无关。)事实上我只得到了少数Profile_OnMigrateAnonymous
的搜索结果以及与此相关的其他项目(包括国际结果)让我觉得这不是一种流行的做事方式?似乎 SimpleMembership 可能已经让匿名用户考虑得更彻底一些?实际上,匿名用户似乎根本没有想到身份。
最佳答案
嗯...这是我在不杀人的情况下所能做的最好的事情,谁知道还有多少天。我不会将其标记为已接受的答案,因为我真的不觉得它是。希望在我死之前的某个时候完成这个项目(因为 .NET 让我每天老化 1 年左右),我只需要采用尼安德特人的方法并逐步完成这个对我来说有意义的方法。
我做的第一件事是在我的表上创建一个唯一约束(在同一个 sql 表中没有重复的两条数据,即 IncidentId 和 IUserId):
CREATE UNIQUE NONCLUSTERED INDEX idx_incidentid_iuserid
ON Likes(IncidentId, IUserId)
在我的 global.asax 中(当时还没有):
...
using System.Web.Security;
using Microsoft.AspNet.Identity;
using ProjectSender.Models;
...
...
public void Profile_OnMigrateAnonymous(object sender, ProfileMigrateEventArgs args)
{
ApplicationDbContext db = new ApplicationDbContext();
var anonymousUser = args.AnonymousID;
var identityUser = User.Identity.Name;
var identityUserId = User.Identity.GetUserId();
foreach (var item in db.Likes.Where(x => x.IUserId == anonymousUser).ToList())
{
//Try = Update anonymousId with identityUserId.
//Catch = Remove any duplicates caught by the exception/constraint
try
{
item.IUserId = identityUserId;
item.IUser = identityUser;
db.SaveChanges();
}
catch
{
db.Likes.Remove(item);
db.SaveChanges();
}
}
// Remove the anonymous cookie.
AnonymousIdentificationModule.ClearAnonymousIdentifier();
}
...
我认为为该约束抛出异常可能不是最符合性能的做法,但我不知道还有什么其他方法可以执行此操作。该用户的每个 IncidentId 最多只能有一个重复记录,因此它看起来很适合。不过,我很想知道更好的方法。
希望这能帮助像我这样迷失的可怜人。我很乐意听到任何其他批评、问题、建议等。谢谢。
关于c# - 使用 Identity 2.x 在 MVC5 中迁移匿名用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30594072/
在为 Web 应用程序用例图建模时,为用户可以拥有的每个角色创建一个角色是否更好?或拥有一个角色、用户和一个具有特权的矩阵? guest < 用户 < 版主 < 管理员 1: guest 、用户、版主
我无法使用 Elixir 连接到 Postgres: ** (Mix) The database for PhoenixChat.Repo couldn't be created: FATAL 28P
这个问题已经有答案了: Group by field name in Java (7 个回答) 已关闭 7 年前。 我必须编写一个需要 List 的方法并返回 Map> . User包含 Person
感谢您的帮助,首先我将显示代码: $dotaz = "Select * from customers JOIN contracts where customers.user_id ='".$_SESS
我只想向所有用户中的一个用户显示一个按钮。我尝试了 orderByKey() 但没有成功! 用户模型有 id 成员,我尝试使用 orderByChild("id") 但结果相同! 我什至尝试了以下技巧
我们在工作中从 MongoDB 切换到 Postgres,我正在建立一个 BDR 组。 在这一步,我正在考虑安全性并尽可能锁定。因此,我希望设置一个 replication 用户(角色)并让 BDR
export class UserListComponent implements OnInit{ users; constructor(private userService: UserS
我可以使用 Sonata User Bundle 将 FOS 包集成到 sonata Admin 包中。我的登录功能正常。现在我想添加 FOSUserBundle 中的更改密码等功能到 sonata
在 LinkedIn 中创建新应用程序时,我得到 4 个单独的代码: API key 秘钥 OAuth 用户 token OAuth 用户密码 我在 OAuth 流程中使用前两个。 的目的是什么?最后
所以..我几乎解决了所有问题。但现在我要处理另一个问题。我使用了这个连接字符串: SqlConnection con = new SqlConnection(@"Data Source=.\SQLEX
我有一组“用户”和一组“订单”。我想列出每个 user_id 的所有 order_id。 var users = { 0: { user_id: 111, us
我已经为我的Django应用创建了一个用户模型 class User(Model): """ The Authentication model. This contains the u
我被这个问题困住了,找不到解决方案。寻找一些方向。我正在用 laravel 开发一个新的项目,目前正致力于用户认证。我正在使用 Laravels 5.8 身份验证模块。 对密码恢复 View 做了一些
安装后我正在使用ansible配置几台计算机。 为此,我在机器上本地运行 ansible。安装中的“主要”用户通常具有不同的名称。我想将该用户用于诸如 become_user 之类的变量. “主要”用
我正在尝试制作一个运行 syncdb 的批处理文件来创建一个数据库文件,然后使用用户名“admin”和密码“admin”创建一个 super 用户。 到目前为止我的代码: python manage.
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
我已在 Azure 数据库服务器上设置异地复制。 服务器上运行的数据库之一具有我通过 SSMS 创建的登录名和用户: https://learn.microsoft.com/en-us/azure/s
我有一个 ionic 2 应用程序,正在使用 native FB Login 来检索名称/图片并将其保存到 NativeStorage。流程是我打开WelcomePage、登录并保存数据。从那里,na
这是我的用户身份验证方法: def user_login(request): if request.method == 'POST': username = request.P
我试图获取来自特定用户的所有推文,但是当我迭代在模板中抛出推文时,我得到“User”对象不可迭代 观看次数 tweets = User.objects.get(username__iexact='us
我是一名优秀的程序员,十分优秀!