NIFCLOUD-mbaas / ncmb_js

ニフクラ mobile backend JavaScript SDK
https://mbaas.nifcloud.com
Other
28 stars 27 forks source link

Feature add sign in with apple ID #251

Closed vfa-tamhh closed 4 years ago

vfa-tamhh commented 4 years ago

概要(Summary)

動作確認手順(Step for Confirmation)

Run the unit test. Manual test.

vfa-trucldt commented 4 years ago

Hiện tại có một số comment như sau. Anh check giúp em nhe.

1/ Về chứ năng login và SignUP sử dụng AppleID

Sau khi confirm method, thì KH thấy hiện tại đang có 2 method là signUpWith và loginWith, nhưng à sau khi test hai chức năng này như bên dưới và implement thì kết quả giống nhau. Có thể qua được phần chứng thực, nhưng mà currentUser không có hiển thị lên nên rấtt khó phán đoán là đã login hay chưa.

Vì vậy, nhờ mình confirm lại xem do implement có vấn đề hay chức năng có vấn đề. Thêm nữa là trong chỗ comment của LoginWith(), đang được ghi như bên dưới. Có thể setting như vậy bên chức login cũng được nhỉ.

Nội dung comment: Tiến hành login(get session token) chứng thực userSNS và setting CurrentUser

2/ Về chức năng link, sử dụng method loginWith như bên dưới và implemt rồi, nhưng mà vẫn không thể implement chức năng linkWith được, confirm lại imlement method hiện tại giúp KH.

3/ Ngoài ra, khôgn thấy phần implement chức năng unlink. Check lại phần này giúp KH luôn ạ

vfa-tamhh commented 4 years ago
  1. Đối với phần implement, thì sau khi thực hiện signupwith thì cần thực hiện login thêm 1 lần nữa trong callback trả về thì mới có current user. Giống với phần giới thiệu ở đây:(Phần này là giới thiệu đăng nhập với facebook) https://mbaas.nifcloud.com/doc/current/sns/facebook_javascript.html Nguyên nhân: do trong hàm signupwith chỉ có việc là đăng ký SNS user mà thôi. Tham khảo đoạn code:
window.cordova.plugins.SignInWithApple.signin(
    { requestedScopes: [0, 1] },
        function(data){
            // Sign in apple with NifCloud here...
            var authData = {id:data.user,
                            access_token:data.authorizationCode,
                            client_id:"asia.vitalify.xxxx"};
            var user = new ncmb.User();
            user.signUpWith("apple", authData) // ユーザの登録
                .then(function(resUser){
                    // Login Mbaas with resUser
                    return ncmb.User.loginWith(resUser); // SNS連携したユーザでログイン
                })
                .then(function(user){
                    // ログイン後処理
                    alert(JSON.stringify(user));
                })
                .catch(function(err){
                    // エラー処理
                    alert(JSON.stringify(err));
                });
            // alert(JSON.stringify(succ));
        },
        function(err){
            alert(JSON.stringify(err));
        }
);

Đối với loginWith, theo source code hiện tại thì sử dụng hàm này có thể tạo được user khi sử dụng login với SNS user. Theo code thì thấy sau khi loginWith thì sẽ tồn tại currentUser tại: https://github.com/NIFCLOUD-mbaas/ncmb_js/blob/master/lib/user.js#L685 Nhưng khi thử nghiệm thực tế, thì chỉ vừa loginWith xong thì currentUser tồn tại. Nhưng gọi đến hàm getCurrentUser thì lại không tồn tại ==> nghi ngờ hàm có lỗi. 2, 3. Hiện tại NCMB js không có hàm link hoặc unlink. ==> Cần phải thêm 2 hàm này.

ncmbadmin commented 4 years ago

本件ご対応ありがとうございました。以下の各機能が正常に動作していることを確認しました。

動作確認コードは以下となります。

function doRegisterApple(){
    alert ("doRegister/Login Apple");
    window.cordova.plugins.SignInWithApple.signin(
                { requestedScopes: [0, 1] },
                function(succ){
                    console.log(JSON.stringify(succ));
                    alert(JSON.stringify(succ));
                    // Sign in apple with NifCloud here...
                    var authData = {id:succ.user,
                                    access_token:succ.authorizationCode,
                                    client_id:"fjct.****.***"};
                    var user = new ncmb.User();
                    user.signUpWith("apple", authData) // ユーザの登録
                        .then(function(resUser){
                            return ncmb.User.loginWith(resUser);
                        })
                        .then(function(user){
                            // ログイン後処理
                            alert("After register/login Apple OD: " + JSON.stringify(user));
                        })
                        .catch(function(err){
                            // エラー処理
                            alert("Register Apple ID Error: " + JSON.stringify(err));
                        });
                    // alert(JSON.stringify(succ));
                },
                function(err){
                    console.log(err);
                    alert("Apple ID Error" + JSON.stringify(err));
                }
            );
}

function doLink(){
    alert ("doLink");
    ncmb.User.login("test", "test")
                .then(function(data){
                // ログイン後処理
                    alert("Login is OK: " + JSON.stringify(data))
                    window.cordova.plugins.SignInWithApple.signin(
                        { requestedScopes: [0, 1] },
                        function(succ){
                            console.log(JSON.stringify(succ));
                            alert(JSON.stringify(succ));
                            // Sign in apple with NifCloud here...
                            var authData = {id:succ.user,
                                            access_token:succ.authorizationCode,
                                            client_id:"fjct.****.***"};
                            var currentUser = ncmb.User.getCurrentUser();
                            currentUser.linkWith("apple",authData)
                                        .then(function(resUser){
                                            // Handler linkWith apple id successfully.
                                            alert("After Link: " + JSON.stringify(resUser));
                                            var currentUser = ncmb.User.getCurrentUser();
                                            if (currentUser) {
                                                alert("ログイン中のユーザー: " + currentUser.get("userName"));
                                            } else {
                                                alert("未ログインまたは取得に失敗");
                                            }
                                        }).catch(function(err){
                                            // エラー処理
                                            alert("Link Error: " +JSON.stringify(err));
                                        });
                        },
                        function(err){
                            console.log(err);
                            alert("Apple ID Error" + JSON.stringify(err));
                        }
                    );
                })
                .catch(function(err){
                // エラー処理
                    alert(JSON.stringify(err));
                });
}

function doUnlink(){
    alert ("doUnlink");
    ncmb.User.login("test", "test")
                .then(function(data){
                    // ログイン後処理
                    alert("Login is OK: " + JSON.stringify(data))
                    var currentUser = ncmb.User.getCurrentUser();
                    if (currentUser) {
                        currentUser.unLinkWith("apple")
                                    .then(function(resUser){
                                        alert("After unlink:" + JSON.stringify(resUser));
                                    }).catch(function(err){
                                        // エラー処理
                                        alert("Unlink error: " + JSON.stringify(err));
                                    });
                    }else {
                        alert("Not logined user");
                    }
                })
                .catch(function(err){
                // エラー処理
                    alert("Error login user test" + JSON.stringify(err));
                });
}

function doLogout(){
    ncmb.User.logout()
            .then(function(){
                var currentUser = ncmb.User.getCurrentUser();
                alert("ログアウトした後のcurrent user" + JSON.stringify(currentUser));
            })
            .catch(function(err){
                alert("Error logout: " + JSON.stringify(err));  
            });
    alert ("doLogout");

}

function doCheckCurrent(){
    alert ("doCheckCurrent");
    var currentUser = ncmb.User.getCurrentUser();
    alert("ログイン中current user:" + JSON.stringify(currentUser));
}