反应式:使用 observables 刷新 AccessToken [英] Reactive: Refresh AccessToken using observables
问题描述
我不太清楚如何适应这种方法生成动态计时器可观察对象.
具体来说,我有两种方法:
GetAccessToken()
RefreshAccessToken()
两者都返回一个 OAuth2AccessTokenResponse
:
公共类 OAuth2AccessTokenResponse{私有字符串令牌类型;私有字符串访问令牌;私人 int expiresIn;私有字符串 refreshToken;私人 int refreshtokenExpiresIn;}
所以,我需要在 expiresIn
属性值(以秒为单位)之前刷新当前的访问令牌.
我已经尝试过我的方法,但我没有得到任何有意义的东西:
this.accessTokenObservable = Observable.产生(this.GetAccessToken(),回复 =>真的,//?????回复 =>回复,//?????回复 =>回复,//?????回复 =>TimeSpan.FromSeconds(this.RefreshAccessToken().ExpiresIn)//?????);
按顺序:
response = this.GetAccessToken()
response.ExpiresIn
过期前 ->response = this.RefreshAccessToken()
- 转到
2.
GetAccessToken
和 RefreshAccessToken
代码:
内部 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:
GetAccessToken()
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:
response = this.GetAccessToken()
- Before
response.ExpiresIn
expires ->response = this.RefreshAccessToken()
- 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屋!