Auth0 i logowanie z FB

0

Hej, witki mi już opadają, a z Auth0 nie ma żadnej pomocy. Próbuję ogarnąć logowanie do aplikacji mobilnej za pomocą Facebook i Auth0.
Aplikacja pisana w Xamarin. Może ktoś tutaj pomoże?

Zaznaczam, że udało mi się zrobić logowanie w aplikacji WPF, ale w Xamarin.Forms jest jakiś duży problem.

To jest moje MainActivity w Android:

[Activity(Label = "MyAppName", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = false, NoHistory = true,
	ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation, LaunchMode = LaunchMode.SingleTask)]
[IntentFilter(
    new[] {Intent.ActionView}, 
    Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
    DataScheme = "com.mycompany.myapp",
    DataHost = "proper-host",
    DataPathPrefix = "/android/com.mycompany.myapp/callback")]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
        protected override void OnNewIntent(Intent intent)
        {
            base.OnNewIntent(intent);
            ActivityMediator.Instance.Send(intent.DataString);            
        }
//rest of code removed for brevity
}

Teraz, żeby wywołać logowanie FB z aplikacji, stworzyłem prosty interfejs i po prostu używam go:

private async void fbLoginButton_Clicked(object sender, EventArgs e)
{
    var loginService = DependencyService.Get<ILoginProvider>();
        
    try
    {
        var loginResult = await loginService.FacebookLogin();
        //tutaj nigdy nie dochodzi
        if (loginResult.IsError)
        {
            Debug.WriteLine("Login error");
        }
        else
        {
            Debug.WriteLine("Login success");
        }
    }
    catch(Exception ex) //tutaj też nigdy nie dochodzi
    {
        Debug.WriteLine("Error: " + ex.Message);
    }
}

A serwis w Androidzie wygląda tak:

[assembly: Dependency(typeof(Xamarin.Droid.Services.AndroidLoginProvider))]
namespace Xamarin.Droid.Services
{
    public class AndroidLoginProvider : ILoginProvider
    {
        public async Task<AuthenticationResult> FacebookLogin()
        {
            Auth0ClientOptions options = new Auth0ClientOptions
            {
                Domain = "proper-domain",
                ClientId = "my-client-id"                
            };

            Auth0Client client = new Auth0Client(options);

            var result = await client.LoginAsync();

            //it never gets here 
            if (result.IsError)
                throw new InvalidOperationException();
            return new AuthenticationResult();
        }
    }
}

Teraz, gdy wywołuję LoginAsync, otwiera się przeglądarka i mogę potwierdzić, że chcę zalogować się używając Facebooka. Po tym nic się nie dzieje. Kod nigdy nie wraca z LoginAsync ani nie wywołuje się ten w OnNewIntent z MainActivity.

Próbowałem już wszystkiego i walczyłem z tym przez dwa dni.

Moja wersja Xamarin: Xamarin.Forms version 5.0.0.2291
Zainstalowałem też Xamarin.Forms.AppLinks 5.0.0.2291 (bo na outpucie widziałem komunikat, że nie można załadować Xamarin.Forms.AppLinks)
Auth0.OidcClient.Android: 3.2.4
Auth0.OidcClient.Core: 3.2.4
IdentityModel.OidcClient: 5.0.0

To jest mój output
[NetworkSecurityConfig] No Network Security Config specified, using platform default
[Choreographer] Skipped 1196 frames! The application may be doing too much work on its main thread.
Thread started: #10
Loaded assembly: /data/data/com.mycompany.myapp/files/.override/System.Memory.dll [External]
Loaded assembly: /data/data/com.mycompany.myapp/files/.override/System.Buffers.dll [External]
Loaded assembly: /data/data/com.mycompany.myapp/files/.override/System.Numerics.Vectors.dll [External]
Loaded assembly: /data/data/com.mycompany.myapp/files/.override/System.Runtime.CompilerServices.Unsafe.dll [External]
Loaded assembly: /data/data/com.mycompany.myapp/files/.override/System.Threading.Tasks.Extensions.dll [External]
[zygote64] Checksum mismatch for dex base.apk
[EGL_emulation] eglMakeCurrent: 0x76df47e3d4a0: ver 3 1 (tinfo 0x76df47f6aac0)
[EGL_emulation] eglMakeCurrent: 0x76df47e3d4a0: ver 3 1 (tinfo 0x76df47f6aac0)

Proszę... HELPunku...

0

Debuggowałeś? Co zwraca w result?

0

Przecież opisałem w kodzie, że nigdy nie wychodzi z client.LoginAsync. Tak jakby gdzieś się tam w środku wywalał. Ale nie można tego wyłapać catch'em. Nic też nie jest logowane.

0

Wewnatrz LoginAsync() powinno tworzyć token na podstawie dostarczonych opcji. Musisz sprawdzic czy jest poprawny. Nie wychodzi z LoginAsync, tam sie wywala więc tam trzeba dokładnie posprawdzać czego brakuje. Może adres nie ten albo brakuję Ci konfiguracji w ConfigServices... nie widać tutaj 90% kodu więc ciężko strzelać.

0
  1. Z którego flow uzywasz.
  2. Logi i jeszcze raz logi. Za mało informacji w tle leci w ch..ja requestów. W zaleznosci od tego jaki tam flow jest pod spodem. I pewnie którys sie sypie z jakiegos powodu albo czeka na odpowiedź.

1 użytkowników online, w tym zalogowanych: 0, gości: 1