Giter VIP home page Giter VIP logo

Comments (7)

bugproof avatar bugproof commented on May 3, 2024 2

@alexandru-calinoiu shouldn't that be called spaghetti auth?

from refit.

anaisbetts avatar anaisbetts commented on May 3, 2024

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.

alexandru-calinoiu avatar alexandru-calinoiu commented on May 3, 2024

@paulduran Thanks for the tip, any estimate on the release of refit 2.0?

from refit.

anaisbetts avatar anaisbetts commented on May 3, 2024

@Balauru It's currently blocked on Xamarin.iOS bugs, check out #38

from refit.

alexandru-calinoiu avatar alexandru-calinoiu commented on May 3, 2024

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.

anaisbetts avatar anaisbetts commented on May 3, 2024

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.

alexandru-calinoiu avatar alexandru-calinoiu commented on May 3, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.