Tôi là nhà phát triển .NET Framework/WebForms đã lâu và đang chuyển sang Core (2.1) cho một dự án mới. Tôi đã thiết lập những điều cơ bản, giải pháp VS chứa dự án DAL và dự án Ứng dụng web (trong MVC). Tôi đang sử dụng Core Identity và đã thêm các tệp khung nhận dạng mặc định. Mọi thứ đều ổn, đăng ký/xác thực Facebook hoạt động tốt. Cho đến nay tôi vẫn chưa hiểu đầy đủ về cách thức hoạt động của sơ đồ xác thực nhưng tôi đang bắt đầu ghép nó lại với nhau.
Một điều tôi nghĩ đến là cách xử lý dữ liệu khiếu nại từ Facebook và đây là một điều mà tôi dường như không thể tìm thấy bất kỳ tài liệu rõ ràng, đơn giản nào về nó. Tôi biết bạn là Thêm xác thực()
Mọi thứ được yêu cầu trong cài đặt của phương thức đều được lưu vào cookie ứng dụng khách và bạn có thể truy xuất nó theo cách này. Nhưng điều tôi muốn làm là tiếp tục và lưu thông tin đó vào Yêu cầu nhận dạng
bàn.
Trong Startup.cs tôi có cái này Thêm xác thực()
cài đặt:
services.AddAuthentication().AddFacebook(options =>
{
tùy chọn.AppId = "XXXXXXXXXX";
tùy chọn.AppSecret = "XXXXXXXXXX";
tùy chọn.SaveTokens = true;
options.Scope.Add("public_profile");
options.Scope.Add("email");
options.Fields.Add("name");
options.ClaimActions.MapJsonKey(ClaimTypes.Name, "name");
});
Thành thật mà nói, tôi không hoàn toàn chắc chắn liệu thiết lập của mình có đúng hay không, yêu cầu phải đưa phần khai báo "tên" vào yêu cầu... nhưng ngay cả nếu đúng như vậy, tôi phải thừa nhận rằng tôi thực sự không biết phải làm gì với nó, phần tái bút.
Tôi đoán là trong thư mục \Identity\Pages\Account Đăng nhập bên ngoài.cshtml.cs
Phim tài liệu OnPostConfirmationAsync()
Điều gì đó phải xảy ra với phương pháp này.
UserManager.AddClaimAsync(người dùng, ...thứ gì đó...);
Nhưng tôi thực sự không biết, và có vẻ như phải có cách nào đó tốt hơn. Ví dụ: Có cách nào để định cấu hình các tùy chọn để lệnh gọi phương thức UserManager.CreateAsync() cũng tự động lưu trữ các khai báo không?
Đây là những câu hỏi rất sơ đẳng và tôi cảm thấy thất vọng vì không thể nhìn rõ. Tất cả những gì tôi cần là một ví dụ hoạt động tốt và tôi chắc chắn mình sẽ có được nó. Mọi thứ khác có vẻ khá cơ bản cho đến nay.
Tôi ngạc nhiên về tốc độ tìm ra câu trả lời cho câu hỏi của chính mình sau khi đăng bài viết này và nó thực sự thô sơ đến mức nào.
Thành thật mà nói, tôi không thực sự hiểu đầy đủ tất cả các tùy chọn khác nhau được thiết lập để làm gì khi thiết lập thông tin đăng nhập nhà cung cấp bên ngoài (trong trường hợp này là Facebook).
Hóa ra không cần phải yêu cầu cụ thể trường "tên" (nó là một phần của phạm vi "public_profile"). Việc ánh xạ các kiểu đã khai báo thành các tên dễ đọc hơn ở cấp độ đó cũng không hẳn là có lợi. Tôi nghĩ điều này chỉ cần thiết nếu bạn đang cố gắng đăng nhập bên ngoài để hoạt động với một số chức năng hiện có, yêu cầu một giá trị cụ thể và bạn không thể thay đổi mã ở đó.
Dù sao đi nữa, nếu bạn đang sử dụng nhà cung cấp bên ngoài, sau khi bạn nhận được phản hồi và có Trình quản lý đăng nhập
Và Trình quản lý người dùng
Chẳng hạn, bạn có thể chỉ cần:
var info = [phiên bản SignInManager].GetExternalLoginInfoAsync();
[Phiên bản UserManager].AddClaimsAsync([Phiên bản người dùng nhận dạng], info.Principal.Claims);
Điều này sẽ ném mọi yêu cầu được trả về từ nhà cung cấp bên ngoài vào bảng yêu cầu của người dùng. Tôi tình cờ đang làm điều gì đó phức tạp hơn thế này một chút, bao gồm việc lặp qua các phần khai báo để có được thứ tôi muốn. Điều này rất dễ thực hiện khi bạn nhận ra (theo tôi đã hiểu bây giờ) rằng tính năng tích hợp sẵn System.Security.Claims.ClaimTypes
Các loại chứa ánh xạ tới tên lược đồ đủ điều kiện của tất cả các loại khai báo phổ biến. Vì vậy, chỉ cần phân loại những loại bạn muốn và thêm chúng nếu cần. Đơn giản.
Tôi là một lập trình viên xuất sắc, rất giỏi!