2017-04-04 3 views
0

우편함에 요청을 보낼 때 (ConvertedAccessTokenCache.Contains (accessToken)) 문을 입력 할 수 없습니다. AccessTokenCache에 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")과 같은 확장 방법 중 하나를 호출해야합니다.

확장 메서드를 선언해야 할 수 있습니다. 사용할 수있게되기 전에 using Microsoft.Extensions.Caching.Memory과 같은 확장 방법 중 하나 인 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