反应式:使用 observables 刷新 AccessToken [英] Reactive: Refresh AccessToken using observables

查看:40
本文介绍了反应式:使用 observables 刷新 AccessToken的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不太清楚如何适应这种方法生成动态计时器可观察对象.

具体来说,我有两种方法:

  1. GetAccessToken()
  2. RefreshAccessToken()

两者都返回一个 OAuth2AccessTokenResponse:

公共类 OAuth2AccessTokenResponse{私有字符串令牌类型;私有字符串访问令牌;私人 int expiresIn;私有字符串 refreshToken;私人 int refreshtokenExpiresIn;}

所以,我需要在 expiresIn 属性值(以秒为单位)之前刷新当前的访问令牌.

我已经尝试过我的方法,但我没有得到任何有意义的东西:

this.accessTokenObservable = Observable.产生(this.GetAccessToken(),回复 =>真的,//?????回复 =>回复,//?????回复 =>回复,//?????回复 =>TimeSpan.FromSeconds(this.RefreshAccessToken().ExpiresIn)//?????);

按顺序:

  1. response = this.GetAccessToken()
  2. response.ExpiresIn 过期前 -> response = this.RefreshAccessToken()
  3. 转到2.

GetAccessTokenRefreshAccessToken 代码:

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

解决方案

在修复了一些编译错误后,这似乎对我有用:

void Main(){var accessTokenObservable = Observable.产生(this.GetAccessToken(),atr =>真的,atr =>this.RefreshAccessToken(),atr =>atr,atr =>TimeSpan.FromSeconds(atr.ExpiresIn));accessTokenObservable.Subscribe(x => Console.WriteLine(x.ExpiresIn));}内部 OAuth2AccessTokenResponse GetAccessToken(){Console.WriteLine("!");返回新的 OAuth2AccessTokenResponse() { ExpiresIn = rnd.Next(3, 11) };}内部 OAuth2AccessTokenResponse RefreshAccessToken(){Console.WriteLine("+");返回新的 OAuth2AccessTokenResponse() { ExpiresIn = rnd.Next(3, 11) };}私人随机 rnd = 新随机();公共类 OAuth2AccessTokenResponse{私有字符串令牌类型;私有字符串访问令牌;私人 int expiresIn;私有字符串 refreshToken;私人 int refreshtokenExpiresIn;public int ExpiresIn;}

我得到这样的结果:

<前>!10+10+3+9+

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)};
}

解决方案

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
+

这篇关于反应式:使用 observables 刷新 AccessToken的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆