Comments (7)
@alexandru-calinoiu shouldn't that be called spaghetti auth?
from refit.
This is an interesting case that isn't really handled well by Refit at the moment - i.e. you effectively want "automatic error handling" for certain types of errors. Right now, I'd probably try to create a wrapper class around the interface that did the OAuth token refresh dance, but that's a lot of manual typing (i.e. exactly the stuff that Refit tries to eliminate).
Once 2.0 is released, one thing you can do is to edit the template that the shim classes are generated from, which would make it easier to add this custom behavior
from refit.
@paulduran Thanks for the tip, any estimate on the release of refit 2.0?
from refit.
@Balauru It's currently blocked on Xamarin.iOS bugs, check out #38
from refit.
Will you consider releasing a beta nuget package with 2.0beta.
It will help me (and probably some other people) integrate the new version and help stabilizing it.
from refit.
No, because it doesn't work correctly at the moment :) There's still some dumb bugs around Visual Studio (VS decides to not define $ProjectDir
inexplicably in certain projects, which breaks everything).
That PR basically has resulted in me finding every MSBuild / xbuild bug ever, and I have to work around them all in order to ship something that will work
from refit.
With the help of #41
I can do something like this:
private IObservable<T> Authorize<T>(IObservable<T> observable)
{
return Observable.Create<T>(
observer =>
{
observable.Subscribe(
// OnNext
observer.OnNext,
// OnError
e =>
{
if (IsUnauthorized(e))
{
_oAuth2.Refresh(_token.refresh_token)
.Concat((IObservable<object>)observable)
.Where(o => o is T)
.Cast<T>()
.Subscribe(observer);
}
else
{
observer.OnError(e);
}
},
// OnComplete
observer.OnCompleted);
return Disposable.Create(() => { });
});
}
Basically wrapping the initial observable into a new one that deals with the authorization if the case might be.
from refit.
Related Issues (20)
- [Bug]: Naming the interface to end with "Client" will result in an error during injection.
- Generated code should use `Array.Empty` or constant field where possible HOT 1
- [Bug]: Failed to generate generated classes in Azure Devops with Refit version 6.3.2 and 7.0.0
- Suggestion: run code cleanup/formatter HOT 1
- Target .NET 8 in Refit HOT 4
- Make fullstack C# development easier
- Add handlers to the interface method parameters and headers before generating the HttpRequestMessage
- [Bug]: POST request sent as GET HOT 9
- [Bug]: Long-lived HttpClient instance despite use of IHttpClientFactory HOT 1
- [Bug]: HttpClients not disposed
- [Bug]: Request streams get disposed and there is no option to avoid it
- Source generator for minimal API
- [Bug]: Cannot set the Content-Type header for a POST request HOT 2
- [Bug]: Refit Does Not Generate Implementations if 3+ Interfaces Share a Name HOT 1
- [Bug]: exception with TrimMode full: "URL /path/{id} has parameter id, but no method parameter matches"
- Dependency Dashboard
- [NiceToHave]: Interface `IApiResponse<out T>` misses `[MemberNotNullWhen(true, nameof(Content))]` attribute
- [Bug]: Using `Refit.HttpClientFactory` with a .Net 8 Blazor Web App HOT 5
- Ability to more simply configure a scoped authorization token
- Support [ValueConvertion] attribute HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from refit.