簡體   English   中英

使用服務器和移動應用程序實現oauth2登錄

[英]Implementing oauth2 login with server and mobile app

我想為我的服務實現使用Facebook登錄(可以通過網絡以及本機android訪問)

這是我在Web部件上所做的:

  1. 用戶單擊登錄到Facebook
  2. 它被定向到fb的page,在其中檢查憑據
  3. 它重定向到我的Web服務上的頁面,其中包含詳細信息
  4. 然后,我自己的服務創建一個訪問令牌供其使用,並將其作為json輸出發送到客戶端。

我想知道如何使用android來實現。 如果我在應用程序內使用網絡視圖,則用戶必須登錄到Facebook(我希望避免這樣做)。 相反,如果他使用Facebook應用程序登錄Facebook,則應直接轉到權限。

如果我將本地sdk用於android,則不知道如何執行重定向到我自己的服務器並為自己的網站生成訪問令牌。

如果要授予用戶訪問網站的令牌(通過儀表板->選擇平台),則應在網站中實施Facebook提供的登錄過程,並在應用程序設置頁(位於Facebook開發者帳戶頁下)下啟用網絡應用程序。

快速入門: https//developers.facebook.com/docs/facebook-login/web

您可以在本機android中完成與在網絡中相同的操作。

僅限Android的Facebook身份驗證

通過使用自己的Web服務,我已經成功實現了與您相同的方案。

 private void doFacebookLogin(View v) {
        final View snakeBarView = v;
        callbackManager = CallbackManager.Factory.create();
        LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email", "public_profile"));
        LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {

                Snackbar.make(snakeBarView, "Facebook Login Success", Snackbar.LENGTH_SHORT).show();
                GraphRequest.newMeRequest(
                        loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(JSONObject json, GraphResponse response) {
                                if (response.getError() != null) {
                                    // handle error
                                    System.out.println("ERROR");
                                } else {
                                    System.out.println("Success");
                                    try {
                                        String jsonresult = String.valueOf(json);
                                        String emailId, id, name, profilePicture;
                                        if (json.isNull("id"))
                                            id = "";
                                        else
                                            id = json.getString("id");
                                        if (json.isNull("email"))
                                            emailId = id + "@facebook.com";
                                        else
                                            emailId = json.getString("email");

                                        if (json.isNull("name"))
                                            name = "";
                                        else
                                            name = json.getString("name");

                                        profilePicture = getString(R.string.fbProfilePicUrl) + id + "/picture?type=large";
                                        Registration registration = new Registration();
                                        registration.Name = name;
                                        registration.EmailId = emailId.toUpperCase();
                                        registration.ProfilePicture = profilePicture;
                                        registration.PhoneNumber = "";
                                        registration.Area = "";
                                        registration.Password = "";
                                        ghilliHelper.signupOrLoginPreStep(registration);
                                    } catch (JSONException e) {
                                        e.printStackTrace();
                                    }
                                }
                            }

                        }).executeAsync();
            }

            @Override
            public void onCancel() {
                Snackbar.make(snakeBarView, "Facebook Login Cancelled", Snackbar.LENGTH_SHORT).show();
            }

            @Override
            public void onError(FacebookException e) {
                Snackbar.make(snakeBarView, "Facebook Login Error", Snackbar.LENGTH_SHORT).show();
            }
        });
    }

成功登錄Facebook后,獲取電子郵件ID,然后從應用程序調用您的服務。

為您服務。

檢查電子郵件ID是否存在

如果電子郵件ID不存在,請創建一個帳戶並返回JSON作為成功登錄名

否則返回JSON作為成功登錄。

網絡服務

 [HttpPost]
        public async Task<string> SocialMediaLogin(Registration reg)
        {
            LoginResult logResult = new LoginResult();

            try
            {
                CloudTableClient tableclient = _storageAccount.CreateCloudTableClient();
                CloudTable table = tableclient.GetTableReference(_registrationTable);

                if (!table.Exists())
                {
                    logResult.Failure = true;
                }
                else
                {
                    TableQuery<Registration> query = new TableQuery<Registration>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, reg.EmailId.ToUpper()));
                    Registration reg_obj2 = new Registration();
                    IEnumerable<Registration> ienum_obj = table.ExecuteQuery(query);
                    if (ienum_obj.Count() != 0)
                    {
                        foreach (var a in ienum_obj)
                        {
                            logResult.Success = true;
                            logResult.UserDetails = a;
                        }

                    }
                    else
                    {
                        RegistrationResult signupResult = await SocialMediaSignup(reg); //Create an Account
                        if (signupResult.Success)
                        {
                            logResult.Success = true;
                            logResult.UserDetails = signupResult.UserDetails;
                        }
                        else if (signupResult.Failure)
                        {
                            logResult.Failure = true;
                        }
                    }
                }
            }
            catch (Exception)
            {
                logResult.Failure = true;
            }
            var resultString = JsonConvert.SerializeObject(logResult);
            return resultString;
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM