2013-04-07 29 views
11

Tôi có một vấn đề khi tôi phát triển trang web của tôi với Google+ đăng nhập: tôi đã từng bước rằng doc nói với tôi nhưng tôi luôn luôn thất bại ở step4: https://developers.google.com/+/web/signin/"immediate_failed" - Không thể automatially đăng nhập người dùng

kết quả luôn là "" ngay lập tức "- Không thể tự động đăng nhập vào người dùng", tôi chỉ không biết tại sao, bất cứ ai có thể giúp tôi, cảm ơn rất nhiều! :-(

+0

Bạn có thể đăng bài hay không mã bạn đang làm việc với? –

Trả lời

21

Lưu ý rằng trong mã mẫu bạn đã chỉ ra, kiểm tra "ngay lập tức" được nhận xét. Đây là ý định, vì lần đầu tiên người dùng gặp nút Đăng nhập trên trang, nó sẽ thất bại.

Lý do không thành công là khi trang tải lần đầu tiên, trước khi người dùng nhấn nút, yêu cầu được gửi tới Google để xác định xem người dùng đã đăng nhập chưa (thông qua Google hoặc trang web khác). Nếu họ - họ không cần phải đăng nhập lại, vì vậy, nút không bao giờ cần được hiển thị, nhưng nếu họ có không phải đã được đăng nhập, bạn sẽ nhận được phản hồi "ngay lập tức" và sẽ cần hiển thị (hoặc không xóa) nút.

tl; dr - Đừng lo lắng về việc nhận được ngay lập tức khi trang tải lần đầu tiên. Điều này là bình thường.

+0

Điều này được hiển thị trong ví dụ hoạt động trên [trang khởi động nhanh Javascript] (https://developers.google.com/sheets/api/quickstart/js). – LondonRob

3

Giải pháp thay thế tôi sử dụng phương pháp gapi.auth.authorize trong gapi.auth.signIn gọi lại. Đây là mã của tôi:

gapi.auth.signIn({ 
    'callback': gPlusLoginCallback 
}); 

function gPlusLoginCallback(authResult) { 
    if (authResult['status']['signed_in']) { 
     doSmth(authRes['access_token']); 
    } else if (authResult['error'] == "immediate_failed") { 
     gapi.auth.authorize({ 
      client_id: gplusClientId, 
      scope: 'https://www.googleapis.com/auth/plus.login email', 
      immediate: true 
     }, function (authRes) { 
      if (authRes['status']['signed_in']) { 
       doSmth(authRes['access_token']); 
      } 
     }); 
    } 
} 

function doSmth(accessToken){ 
    //Do smth 
} 
2

Thay đổi cài đặt này "ngay lập tức: true" thành false "tức thì: sai". Nhưng nếu bạn muốn thực hiện triển khai phức tạp hơn, hãy xem mẫu đầu tiên tại đây https://developers.google.com/api-client-library/javascript/start/start-js. Bạn phải gọi tới "gapi.auth.authorize ({..." của Google, số đầu tiên có "ngay lập tức: true" và thẻ thứ hai có "ngay lập tức: sai".

+0

Cảm ơn! Điều này làm việc cho tôi. – SsjCosty

0

Câu hỏi là cũ nhưng tôi phải đối mặt với vấn đề này thời gian gần đây.

Trong trường hợp của tôi, đó là vì tôi đã chỉ định các URI parameterprompt-none. tôi đoán Google không thích điều đó nếu người dùng chưa bao giờ được ghi nhận vào nền tảng của bạn trước đó.

Bất cứ khi nào tôi đã thay đổi điều đó thành consent hoặc hoàn toàn xóa nó, nó hoạt động rất tốt.

Các vấn đề liên quan