2017-04-04 18 views
0

郵便配達でリクエストを送信したときに、(AccessToken)AccessTokenCacheに含まれているかどうかをチェックする必要があります(AccessToken)< - 認可:ベアラc2E6dGVsZWFkcmU1NSxudA == ....IMemoryCacheに問題があります。文字列に変換できません。

私が行方不明です何

しかし、それは私が「Microsoft.Extensions.Caching.Memory.MemoryCache」を取得含まれている場合は、その点の上にマウスを保持しているとき、それは結果としてチェック..

任意のアイデア?

namespace ....Security.Token 
    { 
     public class TokenManager 
     { 
      private readonly IMemoryCache AccessTokenCache; 
      private readonly IMemoryCache RefreshTokenCache; 
      private CancellationTokenSource ctsAccess; 
      private CancellationTokenSource ctsRefresh; 

      private readonly uint RefreshTokenValidTime = 60 * 60 * 10; //seconds 
    #if DEBUG 
      private readonly uint TokenExpirationTime = 60 * 60 * 2; //seconds 
    #else 
      private readonly uint TokenExpirationTime = 60 * 5; //seconds 
    #endif 

      public TokenManager() 
      { 
       AccessTokenCache = new MemoryCache(new MemoryCacheOptions()); 
       RefreshTokenCache = new MemoryCache(new MemoryCacheOptions()); 
       ctsAccess = new CancellationTokenSource(60 * 60 * 2); 
       ctsRefresh = new CancellationTokenSource(60 * 60 * 10); 
      } 

      public long ValidateToken(string accessToken) 
      { 
       var ConvertedAccessTokenCache = AccessTokenCache.ToString(); 

       if (ConvertedAccessTokenCache.Contains(accessToken)) 
       { 
        var token = (TokenResponse)AccessTokenCache.Get(accessToken); 

        var createdDate = GetCreatedDate(accessToken); 
        var validToDate = createdDate.AddSeconds(token.expires_in); 

        var clientId = GetClientId(accessToken); 

        if (validToDate > SystemTime.Now()) 
        { 
         return clientId; 
        } 
       } 

       return -1L; 
      } 

     } 
    } 




public UserEntity GetUser(string credentials) 
     { 
      var token = new TokenManager(); 
      var clientId = token.ValidateToken(credentials); 
      if (clientId == -1) 
      { 
       return null; 
      } 

      var user = Execute(context => 
      { 
       var command = new GetCommand<UserEntity>(c => c.UserDataAccess.GetUser(clientId)); 
       return command.Execute(null, false, context); 
      }); 

      return user; 
     } 
+0

「ValidateToken(...)」と呼ばれるコード.... ??? – Tseng

+0

編集中、すみません、ごめんなさい! – KakaMir

+0

それからあなたはさらに上に行く必要があります。 'cache.GetString(...) 'の代わりに' cache.ToString() 'を呼び出すようです。 – Tseng

答えて

0

AccessTokenCache MemoryCacheのインスタンスであり、あなたがToString()を呼び出すときには、それが完全な修飾名を返しますdefault implementation、の呼びかけ。

TryGetValueまたはAccessTokenCache.Get<String>("key")のような拡張方法の1つを呼び出す必要があります。

拡張メソッドで宣言する必要があります。利用可能になる前に、using Microsoft.Extensions.Caching.Memoryなどの拡張方法の1つをTryGetValueに電話する必要があります。

public long ValidateToken(string accessToken) 
{ 
    // Get<TokenResponse> or TryGetValue will return default value if not found 
    // which is null in case of string and classes 
    var token = AccessTokenCache.Get<TokenResponse>(accessToken); 

    if (token != null) 
    { 
     var createdDate = GetCreatedDate(accessToken); 
     var validToDate = createdDate.AddSeconds(token.expires_in); 

     var clientId = GetClientId(accessToken); 

     if (validToDate > SystemTime.Now()) 
     { 
      return clientId; 
     } 
    } 
} 
+0

ありがとう、これは助けになった! – KakaMir

関連する問題