واجهة برمجة تطبيقات مصادقة جوجل:كيفية الحصول على عنوان Gmail الخاص بالمستخدم

StackOverflow https://stackoverflow.com/questions/83476

سؤال

لقد كنت أدرس واجهة برمجة تطبيقات مصادقة Google (AuthSub)...سؤالي هو، كيف يمكنني الحصول على معلومات حساب المستخدم (على الأقل عنوان Gmail الخاص به) بعد مرور المصادقة؟

لأنه حاليًا، كل ما أعود به من عملية المصادقة هو رمز مميز يمنحني الوصول إلى أي خدمة من خدمات Google التي حددتها في النطاق، ولكن لا توجد طريقة سهلة حتى للحصول على معرف تسجيل الدخول الخاص بالمستخدم (عنوان Gmail) بقدر ما أستطيع يخبر...


إذا كان الأمر كذلك، ما هي خدمة Google التي تسمح لي بالوصول إلى معلومات المستخدم؟

هل كانت مفيدة؟

المحلول

باستخدام خدمات Google AppEngine GData، يمكنك أن تطلب من المستخدم منحك حق الوصول إلى بريد Google والتقويم وبيكاسا وما إلى ذلك.تحقق من ذلك هنا.

نصائح أخرى

Google Authentication API هو نظام قائم على الرمز المميز لمصادقة مستخدم صالح.ولا يعرض أي واجهة أخرى تسمح بإعادة معلومات صاحب الحساب إلى المرخص له.

يمكنك الحصول على بعض البيانات من خلال واجهة برمجة تطبيقات معرف مفتوح, ، مع امتداد الفأس.إذا كنت تقوم بالمصادقة بطرق أخرى، فأفضل ما وجدته هو الاتصال https://www-opensocial.googleusercontent.com/api/people/@me/@self وسوف تحصل على الاسم والبريد الإلكتروني والصورة.تأكد من أن يكون لديك http://www-opensocial.googleusercontent.com/api في النطاقات عند المصادقة.

    [ValidateInput(false)]
    public ActionResult Authenticate(string returnUrl)
    {
        try
        {
            logger.Info("" + returnUrl + "] LoginController : Authenticate method start  ");
            var response = openid.GetResponse();
            if (response == null)
            {
                try
                {
                    string discoveryuri = "https://www.google.com/accounts/o8/id";
                    //OpenIdRelyingParty openid = new OpenIdRelyingParty();
                    var fetch = new FetchRequest();// new 
                    var b = new UriBuilder(Request.Url) { Query = "" };
                    var req = openid.CreateRequest(discoveryuri, b.Uri, b.Uri);
                    fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
                    fetch.Attributes.AddRequired(WellKnownAttributes.Name.FullName);
                    req.AddExtension(fetch);
                    return req.RedirectingResponse.AsActionResult();
                }
                catch (ProtocolException ex)
                {
                    logger.ErrorFormat(" LoginController : Authenticate method has error, Exception:" + ex.ToString());
                    ViewData["Message"] = ex.Message;
                    return View("Login");
                }
            }
            else
            {
                logger.Info("" + returnUrl + "] LoginController : Authenticate method :when responce not  null  ");
                switch (response.Status)
                {
                    case AuthenticationStatus.Authenticated:
                        logger.Info("" + response.Status + "] LoginController : Authenticate method : responce status  ");
                        var fetchResponse = response.GetExtension<FetchResponse>();
                        string email = fetchResponse.GetAttributeValue(WellKnownAttributes.Contact.Email);
                        string userIPAddress = HttpContext.Request.UserHostAddress;
                        SecurityManager manager = new SecurityManager();                            
                        int userID = manager.IsValidUser(email);

                        if (userID != 0)
                        {
                            ViewBag.IsFailed = "False";
                            logger.Info("" + userID + "] LoginController : Authenticate method : user id id not null  ");
                            Session["FriendlyIdentifier"] = response.FriendlyIdentifierForDisplay;
                            Session["UserEmail"] = email;

                            FormsAuthentication.SetAuthCookie(email, false);

                            WebSession.UserEmail = email;
                            WebSession.UserID = userID;

                            UserManager userManager = new UserManager();
                            WebSession.AssignedSites = userManager.GetAssignedSites(userID);



                            if (!string.IsNullOrEmpty(returnUrl))
                            {
                                logger.Info("" + returnUrl + "] LoginController : Authenticate method : retutn url not null then return Redirect   ");
                                return Redirect(returnUrl);
                            }
                            else
                            {
                                logger.Info("" + returnUrl + "] LoginController : Authenticate method : retutn url null then return RedirectToAction   ");
                                //
                                return Redirect("/Home");
                            }
                        }
                        else
                        {
                            ViewBag.IsFailed = "True";
                            logger.Info("" + returnUrl + "] LoginController : Authenticate method :user id null   ");
                            if (!string.IsNullOrEmpty(returnUrl))
                            {
                                logger.Info("" + returnUrl + "] LoginController : Authenticate method :and return Redirect   ");
                                return Redirect(returnUrl);
                            }
                            else
                            {
                                logger.Info("" + returnUrl + "] LoginController : Authenticate method :and return RedirectToAction   ");

                                return View("Index");

                            }
                        }

                    case AuthenticationStatus.Canceled:
                        logger.Info("" + response.Status + "] LoginController : Authenticate method : AuthenticationStatus.Canceled  and return view  ");
                        ViewData["Message"] = "Canceled at provider";
                        return View("Login");
                    case AuthenticationStatus.Failed:
                        logger.Info("" + response.Status + "] LoginController : Authenticate method : AuthenticationStatus.Failed and return view   ");
                        logger.Error(response.Exception.Message);
                        ViewData["Message"] = response.Exception.Message;
                        return View("Login");
                }

            }
            logger.Info("" + returnUrl + "] LoginController : Authenticate method end and return  EmptyResult");
            return new EmptyResult();
        }
        catch (Exception ex)
        {
            logger.Error(" LoginController : Authenticate method ", ex);
            throw;
        }
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top