** ** Clicky-click for da GitHub project
IMO,忘記存儲用戶名和密碼。這是瘋狂的談話!讓用戶使用他們的Facebook,Google或Twitter憑據登錄。這是普通網站的80%。
認證和存儲憑證是IMO的兩項不同任務。例如,我不在乎你在哪裏進行身份驗證..一旦你做..我不在乎你如何存儲這些數據:)
個人而言,我會將它存儲在RavenDb ..但那是我的個人選擇。
同樣 - >保持這兩項任務SEPARATE是(IMO)的關鍵。
所以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);
}
所以讓我們看看我做了什麼。我已經刪除了任何冗長的東西(值檢查等),這只是在這個答案中的噪音。
首先,我處理Authenticate回調。例如。我剛剛去過Facebook,它說'是的!你是你',它會回到我的網站,有一些數據是我要求它給我的。
接下來...我們從Facebook獲得一些數據..但這可能不是我們想要放入的格式,在RavenDb中。所以我把它從舊格式轉換成新的閃耀User
類,這是你將堅持在你的Db。
第三 - 我將這個存儲在Db中。 這就是你要做任何定製數據庫邏輯的地方
就是這樣。
M O對düL A R IŽ(E T)H AŤ中文I T
The.End。
現在請原諒..在啓示錄之前還有幾個小時。我必須準備自己。
我完成了這個。我的需要是識別用戶,而不是進行身份驗證 - 他們可以做到這一點。所以這個工作。現在,我已將用戶存儲在我的數據庫中,我需要將它與ASP.NET成員資格系統一起使用。所以我可以用[Authorize]和[AllowAnonymous]標記動作,返回ASP.NET等內置功能。我怎麼做?有了這個:http://www.codethinked.com/setting-up-authentication-in-aspnet-mvc – esbenr
@esbenr要使用'[Authorize]'等屬性..你**不要**(和我重複,**不要**)需要使用ASP.NET Membership系統。 **請不要在任何情況下都使用**(Google爲100萬個原因)。爲了利用'[Authorize]'等等,你只需要在'IPrincipal'和'IIdentity'中存儲使用信息(是的,2x I)。只需創建一個新的'GenericPrincipal',然後添加一個新的'GenericIdentity'。谷歌爲那些更多的代碼:) –
謝謝,這就是我最終做的。我只使用Auth門票+ cookie來獲取靜態USER主體 - 它的工作原理就像是一種魅力:-)這種方法在internet-thingie上陳述了很多地方。順便說一句:我創建了一個自定義的原型實現和一個自定義的IIdentity實現。因此我想在我的用戶環境中使用更多的屬性。感謝您的回覆。/esbenr – esbenr