使用Servicestack(Java& Swift)通过Facebook验证用户

时间:2017-03-24 22:40:42

标签: servicestack servicestack-auth

我在Android(Java)和iOS(Swift)应用程序中使用servicestack客户端,但我需要使用facebook和google验证用户,你知道是否存在像 Xamarin.Auth这样的模块 https://github.com/xamarin/Xamarin.Auth但是对于原生应用程序?

谢谢

1 个答案:

答案 0 :(得分:2)

查看AndroidJavaChat这是C# Xamarin.Android Chat的一个端口,它解释了使用SDK进行身份验证的几种不同方式,并利用 ServiceStack v4.5.7 + 现在是available on MyGet

首先按照install Facebook's SDK的入门指南进行操作。

然后检查LoginButtonActivity的实现,使用Facebook登录按钮进行身份验证,您可以在Layout.xml中定义:

<com.facebook.login.widget.LoginButton
    android:id="@+id/btnFacebookLogin"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="30dp"
    android:layout_marginBottom="30dp" />

Signing in with Facebook Login Button

要使用Facebook的SDK,您的AppId需要在 AndroidManifest.xml 中定义:

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>

https://developers.facebook.com/apps

中创建的应用中使用ApplicationId为您的Facebook应用

然后,您可以通过在LoginButton上注册回调来使用Facebook登录按钮进行身份验证。之后,只需处理Facebook onSuccess()onCancel()onError()回调即可。当onSuccess()回调被触发时,这意味着用户已成功登录我们的Android应用程序,然后我们需要使用用户的Facebook AccessToken通过我们的ServiceStack聊天服务器进行身份验证,例如:< / p>

facebookCallback = CallbackManager.Factory.create();
btnFacebookLogin = (LoginButton) findViewById(R.id.btnFacebookLogin);
btnFacebookLogin.setReadPermissions("email"); // Ask user for permission to view access email address
btnFacebookLogin.registerCallback(facebookCallback, new FacebookCallback<LoginResult>() {
    @Override
    public void onSuccess(LoginResult loginResult) {
        UiHelpers.setStatus(txtStatus, "Local facebook sign-in successful, signing into server...");

        App.get().getServiceClient().postAsync(new dtos.Authenticate()
            .setProvider("facebook")
            .setAccessToken(loginResult.getAccessToken().getToken())
            .setRememberMe(true),
            r -> {
                UiHelpers.setStatus(txtStatus, "Server facebook sign-in successful, opening chat...");
                Intent intent = new Intent(activity, MainActivity.class);
                stopProgressBar();
                startActivity(intent);
            },
            error -> {
                UiHelpers.setStatusError(txtStatus, "Server facebook sign-in failed", error);
                stopProgressBar();
            });
    }

    @Override
    public void onCancel() {
        stopProgressBar();
    }

    @Override
    public void onError(FacebookException exception) {
        Log.e(exception);
        stopProgressBar();
    }
});

用户通过ServiceStack服务器进行身份验证后,将在服务客户端上配置经过身份验证的会话Cookie,您现在可以使用该Cookie来进行身份验证请求。

如果您想使用自己的自定义图片登录登录按钮,请按照Signing in with Custom Facebook Image Button中的步骤操作。

Automatically Sign-In previously Signed In Users

用户成功通过Facebook验证后,您第一次可以从Facebook的AccessToken.getCurrentAccessToken()访问他们保存的令牌,以便自动登录以供将来重新启动,例如:

AccessToken facebookAccessToken = AccessToken.getCurrentAccessToken();
    if (facebookAccessToken != null){
        client.postAsync(dtos.Authenticate()
            .setProvider("facebook")
            .setAccessToken(facebookAccessToken.getToken())
            .setRememberMe(true),
            r -> {
                //User has signed using Saved Access Token
            });
    }