Bạn không nhận được màn hình lựa chọn đa người dùng vì thông số sau: authuser=0
Thao tác này sẽ tự động chọn tài khoản đầu tiên bạn đăng nhập với (authuser=1
sẽ chọn lần thứ hai v.v.). Hiện tại, không thể loại bỏ tham số đó bằng thư viện khách vì thư viện khách đặt nó tự động thành 0 (đây là lý do tại sao nó không xử lý nhiều tài khoản) nếu không có giá trị như vậy một cách là ghi đè lên nó tới -1 chẳng hạn, điều này sẽ hiển thị trình chọn nhiều tài khoản. Sau đó, bạn cũng có thể yêu cầu truy cập vào số user's profile or email cùng một lúc bạn yêu cầu quyền truy cập vào các API khác và tìm nạp email của người dùng hoặc ID của người dùng đó. Sau đó, trên auth tiếp theo bạn có thể chỉ định các thông số user_id
mà wil bỏ qua màn hình lựa chọn người dùng.
Vì vậy, trong thực tế, lần đầu tiên cho phép như thế này:
gapi.auth.authorize({client_id: <Your Client ID>,
scope: 'https://www.googleapis.com/auth/drive openid', // That requires access to Google Drive and to the UserInfo API
authuser: -1});
Vấn đề duy nhất với các bên trên là tự động làm mới của thư viện khách hàng sẽ không làm việc vì mỗi auth sẽ bởi phong toả tại các tài khoản đa màn hình lựa chọn.
Bí quyết là để có được ID của người sử dụng bằng cách sử dụng API UserInfo, lưu ID đó trong một session cookie và sử dụng nó trên auth tiếp theo như thế:
gapi.auth.authorize({client_id: <Your Client ID>,
scope: 'https://www.googleapis.com/auth/drive openid',
user_id: <The User ID>,
authuser: -1});
Xác định ID người dùng sẽ đảm bảo trình chọn nhiều tài khoản bỏ qua và sẽ cho phép tự động làm mới mã thông báo từ lib ứng dụng khách để hoạt động lại.
Để tham khảo, param URL khác mà ảnh hưởng đến dòng chảy tài khoản là:
user_id
: tương tự hơn authuser
(bỏ qua màn hình lựa chọn đa tài khoản) nhưng bạn có thể sử dụng địa chỉ email (ví dụ [email protected]) hoặc ID người dùng bạn nhận được từ điểm kết nối ID ID mở của chúng tôi/API Google +/UserInfo API
approval_prompt
: mặc định là auto
, có thể được đặt thành force
để đảm bảo màn hình phê duyệt/cấp quyền được hiển thị. Điều này đảm bảo rằng màn hình gant không bị bỏ qua trên auth tiếp theo (sau lần đầu tiên).
immediate
: immediate
hơi phức tạp, khi được đặt thành true
nó sẽ bỏ qua màn hình cấp tài khoản (loại approval_prompt=auto
) nếu người dùng đã được phê duyệt trước đó, nhưng nếu người dùng chưa được phê duyệt trước đó, bạn sẽ bị chuyển hướng với lỗi : error=immediate_failed
. Nếu được đặt thành false
, nó sẽ không thêm hành vi đặc biệt và do đó dự phòng trên thiết lập hành vi theo giá trị approval_prompt
.
Lưu ý: immediate=true
và approval_prompt=force
là kết hợp không hợp lệ.
Tôi nghĩ rằng thư viện khách hàng đang sử dụng immediate
param để nếu ông nhận được error=immediate_failed
nó sẽ khởi động lại một dòng chảy auth mà không authuser
param, nhưng đó là chỉ suy đoán :)
Trong khi đó, bạn đã trả lời kỹ thuật câu hỏi "Làm cách nào để nhận được lời nhắc cho tài khoản Google nào sử dụng thư viện máy khách JS cho Drive?", Câu hỏi của tôi thực sự bị đặt tên sai, xin lỗi :). – David
Tôi vừa trả lời điều này vì tôi biết rõ hơn cách các điểm cuối OAuth hoạt động như thế nào so với thư viện JS Client: D Tôi không biết nó không hoạt động với các tài khoản đa người dùng:/ – Nivco
Bạn tìm thông số này ở đâu? không thể tìm thấy nó trong https://developers.google.com/+/web/api/javascript – chulian