** Clicky-click for da GitHub project **
IMO, quên tên người dùng lưu trữ và mật khẩu. Đó là nói chuyện điên rồ! Cho phép mọi người đăng nhập bằng thông tin đăng nhập Facebook, Google hoặc Twitter của họ. Đó là 80% cho các trang web phổ biến.
Xác thực và lưu trữ thông tin đăng nhập là hai tác vụ khác nhau IMO. Ví dụ, tôi không quan tâm nơi bạn xác thực với .. và một khi bạn làm .. Tôi không quan tâm làm thế nào bạn lưu trữ dữ liệu đó :)
Cá nhân, tôi sẽ lưu nó trong một RavenDb .. nhưng đó là của tôi lựa chọn cá nhân.
Như vậy -> giữ hai nhiệm vụ này là RIÊNG (IMO) rất quan trọng.
Vì vậy lets look at some codez ....
public ActionResult AuthenticateCallback(string providerKey)
{
// SNIP SNIP SNIP SNIP
var model = new AuthenticateCallbackViewModel();
try
{
// SNIP SNIP SNIP SNIP
// Complete the authentication process by retrieving the UserInformation from the provider.
model.AuthenticatedClient = _authenticationService.CheckCallback(providerKey, Request.Params, state.ToString());
// Create a new user account or update an existing account.
// Whatever you end up doing, this is the part u want to
// pass this data to your repository (eg. RavenDb, Sql Server, etc)
// I'll use RavenDb in this example...
// And yes .. this is a contrite example. U might want to check for
// existing email or id or whatever u need to do, etc.
var myUser = Mapper.Map(model.AuthenticatedClient);
session.Store(myUser);
session.SaveChanges();
// SNIP SNIP SNIP SNIP
}
catch (Exception exception)
{
model.Exception = exception;
}
return View(model);
}
Vì vậy, cho phép nhìn vào những gì tôi đã thực hiện.Tôi đã rút ra bất kỳ công cụ tiết (kiểm tra giá trị, vv) mà chỉ là tiếng ồn trong câu trả lời SO này.
Trước tiên, tôi xử lý gọi lại Xác thực. Ví dụ. Tôi vừa mới truy cập Facebook và đã nói 'có! bạn là bạn '.. và nó trở lại trang web của tôi, với một số dữ liệu tôi đã yêu cầu nó cho tôi.
Tiếp theo ... chúng tôi được cung cấp một số dữ liệu từ Facebook .. nhưng điều này có thể không có định dạng mà chúng tôi muốn đưa vào trong RavenDb. Vì vậy, tôi chuyển đổi nó từ định dạng cũ sang một lớp học mới sáng bóng User
đó là những gì bạn sẽ dính vào Db của bạn.
Thứ ba - Tôi lưu trữ giá trị này trong Db. Đây là nơi bạn sẽ thực hiện bất kỳ logic DB tùy chỉnh nào
.
M O D U L A R I Z E T H A T S H I T
The.End.
Bây giờ xin lỗi .. có vài giờ trước khi The Apocalypse. Tôi phải tự chuẩn bị.
Tôi đã làm chính xác điều này. Nhu cầu của tôi là xác định người dùng, không xác thực - họ có thể làm điều đó chống lại bất cứ điều gì. Vì vậy, điều này hoạt động. Bây giờ tôi đã lưu trữ User trong DB của mình, tôi cần sử dụng nó cùng với hệ thống thành viên ASP.NET. Vì vậy, tôi có thể gắn cờ các hành động với [Ủy quyền] và [AllowAnonymous], trả về url, vv các tính năng dựng sẵn trong ASP.NET. Làm thế nào để làm điều đó? Với điều này: http://www.codethinked.com/setting-up-authentication-in-aspnet-mvc – esbenr
@esbenr Để sử dụng các thuộc tính '[Ủy quyền]', v.v .. bạn ** KHÔNG ** (và tôi lặp lại, ** KHÔNG **) cần sử dụng hệ thống Thành viên ASP.NET. ** XIN VUI LÒNG KHÔNG SỬ DỤNG R ATNG TẤT CẢ NÀO, DƯỚI BẤT K C ĐẶC ĐIỂM ** (Google vì lý do tại sao 1000000). Để tận dụng '[Ủy quyền]', v.v .. u chỉ cần sử dụng lưu trữ thông tin sử dụng trong một 'IPrincipal' và' IIdentity' (có, 2x của tôi). Chỉ cần tạo một 'GenericPrincipal' mới và trong đó, thêm một' GenericIdentity' mới. Google cho những người có thêm mã :) –
Cảm ơn, đó là những gì tôi đã làm. Tôi chỉ sử dụng cookie Auth ticket + để có được tên miền chính của NGƯỜI DÙNG để làm việc - nó hoạt động như một nét duyên dáng :-) Phương pháp này được nói nhiều nơi trên internet-thingie. BTW: Tôi đã tạo ra một triển khai IPrinciple tùy chỉnh và một tùy chỉnh IIdentity impl. do đó tôi muốn nhiều thuộc tính hơn trong ngữ cảnh Người dùng của mình. Cảm ơn vì đã trả lời./esbenr – esbenr