Asp.net core 2.1中的外部登录身份验证

时间:2018-09-04 08:57:40

标签: asp.net-core asp.net-core-2.1

Asp.Net核心应用程序,我已经集成了第三方登录身份验证,“ Twitter,Facebook”等,但是问题是:“我的用户身份上下文具有名字和姓氏”,这是必需的,但是当我尝试进行身份验证时通过外部提供程序,它将无法选择添加这些字段。如何使用外部登录提供程序添加这些字段,因此我的数据库将具有名字和姓氏以及外部提供程序的凭据详细信息。

谢谢

1 个答案:

答案 0 :(得分:2)

好吧,直到提供一些代码之前,答案是“取决于”,但是我会尝试的。昨天我做了类似的研究,所以它是一种新鲜的知识。作为前提,我创建了一个新的Razor pages项目,并通过了different providers的这些教程。

首先,不同的提供商将为您提供不同的数据。例如,无需任何其他配置,您就只能从Facebook和Google获得名字和姓氏。为了从Twitter获得名称,您需要手动添加声明

[{"id":"219","name":"Jimmy"},{"id":"220","name":"Bobby"},{"id":"218","name":"Arthur"}]

或以某种方式处理public decimal GetSumOfAmount(int id) { decimal query = from emp in _context.Employees join cd in _context.ContractDetails on emp.EmployeeID equals cd.EmployeeID where cd.EmployeeID == id select cd.Amount; return query; //decimal value = (from dc in _context.ContractDetails // where dc.EmployeeID == id // select dc.Amount).Sum(); //return value; } 事件。问题不会止于此。在Twitter中,他们不区分名字和姓氏,所以只是名字。锦上添花:在Twitter和Google中,您可以删除自己的名字,这样就不会得到任何数据。

其次,保留数据。我认为可以简单地遵循建议的in article already mentioned的方法并保存声明和/或扩展.AddTwitter(options => { options.ConsumerKey = Configuration["Authentication:Twitter:ConsumerKey"]; options.ConsumerSecret = Configuration["Authentication:Twitter:ConsumerSecret"]; options.RetrieveUserDetails = true; options.ClaimActions.MapJsonKey(ClaimTypes.GivenName, "name"); }) 类,我相信这是您的情况。我在CreatingTicket中将用户更新呼叫放置在他们保存声明的位置:

IdentityUser

希望有帮助。