2017-08-14 95 views
1

我想使用Asp.NET Identity系統的某些部分來訪問自定義數據庫,但不是所有的部分。 數據庫部分不是太困難,但我正試圖找出如何編寫代碼來將我的自定義實現中的某些身份方法工作。例如,其中一個不同的項目是不使用UserManager密碼散列,而是使用其他第三方密碼散列函數。我想利用的一些事情是cookie身份驗證,密碼驗證程序字段等。 因此,我試圖做的第一件事是查看標準的CreateAsync方法的作用,並將其帶到空行看起來像這樣:使用Asp.NET Identity與自定義用戶管理器/數據庫

[AsyncStateMachine(typeof(UserManager<>.<CreateAsync>d__73))] 
public virtual Task<IdentityResult> CreateAsync(TUser user, string password); 

我該如何定製創建異步和密碼驗證功能? 哦,也是通過'自定義數據庫'我的意思是,我不想使用Identity,沒有角色,聲明,只有我自己的Users表是所有的表。

回答

1

我最近做了這個,但是有太多的代碼在這裏作爲答案遺憾地發佈。

對於CreateAsync你需要實現IUserStore<your custom user>, IUserPasswordStore<your custom user> 那麼你需要實現CreateAsync方法自定義userstore類:

async Task<IdentityResult> IUserStore<your custom user>.CreateAsync(your custom user user, CancellationToken cancellationToken) 
     { 

      IdentityResult result; 
      var tsk = Task.Factory.StartNew(() => result = someDataAccessClass.SomeSaveUserToDatabaseFUnction(user)); 

      return await tsk; 
     } 

可以實現數據類,並保存用戶的功能,但是你想在這一點上。

根據您的操作,密碼驗證稍微複雜一些。

您必須創建從常規SignInManager繼承的自定義SignInManager。然後,只要以安全明智的方式覆蓋PasswordSignInAsync方法。另外請注意,您需要在UserManager上實現一些其他功能,如查找用戶異步和類似的東西。

另請注意,對於Identity Pipeline來填充缺失的部分,您需要在startup.cs configureservices()方法中執行services.AddIdentity().AddUserStore().AddSignInManger(以及您自定義的所有其他類),然後將app.UseIDentity()也拋入您的配置方法中。

+0

好吧,這是很多的理解,我想我會花一些時間。謝謝你的建議! –

+1

是的,它需要一段時間來弄清楚如何做到這一點,因爲MS堅持把Entity Framework填入它。如果你想嘗試一條不同的路徑,那麼在我最終獲得身份認證後,我發現了這個頁面。 https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie –

+0

好吧,所以魔法進一步內部「SomeSaveUserToDatabaseFUnction」..我正確的猜測,在它裏面你只需添加一些屬性記錄添加到數據庫上下文並對其執行SaveChanges()? –

相關問題