无法注销Azure Wams MobileServiceUser

本文关键字:Wams MobileServiceUser Azure 注销 | 更新日期: 2023-09-27 18:07:10

一如既往:我是个新手,从问题中你会发现。

我正在玩Azure Wams在Xamarin。Android,它似乎是一个很棒的工具。它在Xamarin中登录一个用户。Android。我的问题来了,当我希望用户能够注销,然后登录与另一个帐户(我使用谷歌的身份验证)。我曾经可以通过注销按钮来使用它,像这样:

登录时,AuthenticationToken保存在字符串中以供以后使用。因此,当用户确认他想要注销时,只需UserAuth = String。空,然后我再次调用ConnectToMobileService():

public async Task ConnectToMobileService ()
    {
        try 
        {
            CurrentPlatform.Init ();
            client = new MobileServiceClient(
                Constants.ApplicationURL,
                Constants.ApplicationKey, progressHandler);
            if (string.IsNullOrEmpty(UserAuth)) {
            await Authenticate();
                UserId = user.UserId;
                await CreateTables();
                await CheckUserId ();
            }
            else if (!string.IsNullOrEmpty(UserAuth)) {
                client.CurrentUser = new MobileServiceUser(UserId);
                client.CurrentUser.MobileServiceAuthenticationToken = (UserAuth);
                await CreateTables();
            }
        }
        catch (Exception e) 
        {
            CreateAndShowDialog(e, "Error");
        }
    }

这用于为我重新启动身份验证窗口,并且用户使用他的新帐户登录-而信息保存在首选项中用于其他活动等等。在更新了Xamarin并将我的执照升级为Indie之后,情况就不一样了。现在,它启动了一小秒钟的Authenticate,然后它直接返回,就像用户以之前的方式登录一样。

我意识到这可能是因为在某个地方为Wams保存了一些共同的偏好。我研究了在Java中清除这些的方法,但是我还不能在c#中重新创建它们。

客户端。Logout()似乎不能单独清除它们。这是我如何尝试重新创建它的其余部分:

private void ClearPreferences(){
        var prefs = this.GetSharedPreferences("UserDate", 0);
        var editor = prefs.Edit ();
        editor.Clear ();
        editor.Commit ();
    }

这不起任何作用。有谁能帮帮我吗?我如何重置它,以便用户能够用另一个帐户登录-或者例如让朋友在他们的手机上登录?提前感谢!

无法注销Azure Wams MobileServiceUser

好的,所以事实证明信息是由验证提供者存储为cookie的。你必须注销并清除cookie。然后它就像一个魔法。下面是清除cookie的方法:

client.Logout ();
        ClearCookies ();
        await ConnectToMobileService ();
    }
    public static void ClearCookies () {
        Android.Webkit.CookieSyncManager.CreateInstance (Android.App.Application.Context);
        Android.Webkit.CookieManager.Instance.RemoveAllCookie ();
    }