无法注销Azure Wams MobileServiceUser

时间:2014-06-06 14:02:16

标签: c# azure xamarin.android

一如既往:我非常喜欢这个菜鸟,因为你会从问题中看出来。

我正在使用Xamarin.Android中的Azure Wams,它似乎是一个很棒的工具。它大大地登录了Xamarin.Android中的用户。当我希望用户能够注销然后使用其他帐户登录时(我使用Google进行身份验证),我的问题就来了。我曾经能够使用退出按钮,如下所示:

登录时,AuthenticationToken保存在String中供以后使用。因此,当用户确认他想要注销时,我只是UserAuth = String.Empty然后我再次调用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后,情况就不再如此了。现在,它会在短时间内进行身份验证,然后它会直接返回,就好像用户以前所述的exaxt方式登录一样。

我意识到这可能是因为在Wams的某处保存了一些共享偏好。我已经研究了清除这些i Java的方法,但是我无法在C#中重新创建它们。

client.Logout()似乎没有单独清除它们。这就是我试图重新创建其余内容的方式:

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

    }

这没有任何作用。那么,任何人都可以帮助我吗?我如何重置它,以便用户能够使用其他帐户登录 - 或者让朋友登录他们的手机?提前致谢!

1 个答案:

答案 0 :(得分:2)

好的,事实证明,信息由auth提供商存储为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 ();
    }