Reactive: Refresh AccessToken using observables

余生颓废 提交于 2019-12-13 03:53:29

问题


I don't quite figure out how to adapt this approach in order to generate dynamic timer observables.

Concretly, I've two methods:

  1. GetAccessToken()
  2. RefreshAccessToken()

Both returns a OAuth2AccessTokenResponse:

public class OAuth2AccessTokenResponse
{
    private string tokenType;
    private string accessToken;
    private int expiresIn;
    private string refreshToken;
    private int refreshtokenExpiresIn;
}

So, I need to refresh the current accesstoken before expiresIn property value in seconds elapses.

I've tried to make my approach but I've not been able to get anything with sense:

this.accessTokenObservable = Observable
    .Generate(
        this.GetAccessToken(),
        resp => true, //?????
        resp => resp, //?????
        resp => resp, //?????
        resp => TimeSpan.FromSeconds(this.RefreshAccessToken().ExpiresIn) //?????
    );

Sequencially:

  1. response = this.GetAccessToken()
  2. Before response.ExpiresIn expires -> response = this.RefreshAccessToken()
  3. Go to 2.

GetAccessToken and RefreshAccessToken code:

internal OAuth2AccessTokenResponse GetAccessToken()
{
    return new OAuth2AccessTokenResponse() {ExpiresIn = new Math.Random().Next(3,11)};
}

internal OAuth2AccessTokenResponse RefreshAccessToken()
{
    return new OAuth2AccessTokenResponse() {ExpiresIn = new Math.Random().Next(3,11)};
}

回答1:


After fixing a few compile errors, this seems to work for me:

void Main()
{
    var accessTokenObservable = Observable
        .Generate(
            this.GetAccessToken(),
            atr => true,
            atr => this.RefreshAccessToken(),
            atr => atr,
            atr => TimeSpan.FromSeconds(atr.ExpiresIn)
        );

    accessTokenObservable.Subscribe(x => Console.WriteLine(x.ExpiresIn));
}

internal OAuth2AccessTokenResponse GetAccessToken()
{
    Console.WriteLine("!");
    return new OAuth2AccessTokenResponse() { ExpiresIn = rnd.Next(3, 11) };
}

internal OAuth2AccessTokenResponse RefreshAccessToken()
{
    Console.WriteLine("+");
    return new OAuth2AccessTokenResponse() { ExpiresIn = rnd.Next(3, 11) };
}

private Random rnd = new Random();

public class OAuth2AccessTokenResponse
{
    private string tokenType;
    private string accessToken;
    private int expiresIn;
    private string refreshToken;
    private int refreshtokenExpiresIn;

    public int ExpiresIn;
}

I get a result like this:

!
10
+
10
+
3
+
9
+


来源:https://stackoverflow.com/questions/46465215/reactive-refresh-accesstoken-using-observables

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!