2012-11-23 60 views
3

我正在嘗試自定義我自己的ExtendedMembershipProvider實現。我不知道GetUserIDFromOauth方法應該做什麼?我發現它默認會拋出一個異常,並且它應該從打開的auth提供程序返回用戶ID。ExtendedMembershipProvider.GetUserIDfromOauth返回什麼用戶ID?

我沒有看到這應該如何完成,除非這意味着找到該用戶是否存在於系統中?這是目的嗎?我發現缺乏文檔混淆...

謝謝。

回答

3

GetUserIdFromOAuth是使用ExtendedMembershipProvider類來找到你的用戶表User.Id基於ProviderProviderUserId Web應用程序的數據庫,你的OAuth或OpenID提供商獲取的方法。獲取指定用戶的ProviderProviderUserId數據後,您需要將其保存在數據庫中。

默認返回throw new NotImplementedException();。您需要實現此方法以從您的應用程序數據庫中返回一個整數User.Id

這是一個簡單的實現:


    public override int GetUserIdFromOAuth(string provider, string providerUserId) 
    { 
     using (var context = new YourApplicationEntities()) 
     { 
      // Try to find user with certain Provider and ProviderUserId 
      var user = context.Users.SingleOrDefault(
          q => q.Provider == provider && 
          q.ProviderUserId == providerUserId 
      ); 

      if (user != null) 
      { 
       return user.Id; 
      } 
     } 

     return -1; 
    } 

此實現假定你有你的UserProviderProviderUserId領域。如果將這些信息保存在不同的表中,則只需修改LINQ即可返回所需的結果。

+0

好的,謝謝。這就說得通了。 –