Câu hỏi này đã được hỏi một vài lần trên Stack, nhưng không có câu trả lời thực sự nào. Hãy để tôi cố gắng giải thích tình hình của tôi.Đăng nhập OAuth của Facebook Đăng nhập - access_token API trả lại "Mã ủy quyền này đã được sử dụng"
Chúng tôi sử dụng ứng dụng sử dụng thông tin đăng nhập Facebook OAuth2. Đăng nhập này được sử dụng để làm việc tốt cho đến tuần trước, và tất cả của một bất ngờ nó đang gây phiền hà cho chúng tôi bây giờ.
Application Lưu lượng:
Bước 1: ép tài khoản đăng nhập với nút Facebook trên trang web của chúng tôi
Bước 2: chuyển hướng đến trang Facebook đăng nhập/uỷ quyền
Bước 3 : Khi ủy quyền ứng dụng, cuộc gọi lại đến ứng dụng của chúng tôi, với tham số "mã" ngắn.
Bước 4: Thông số "mã" này sẽ được trao đổi cho mã thông báo truy cập 60 ngày sử dụng URL "https://graph.facebook.com/oauth/access_token".
Lỗi trong Bước 4:
Khi chúng tôi cố gắng để trao đổi cuộc sống ngắn "code" cho thẻ truy cập, chúng tôi nhận được lỗi này từ Facebook.
{"error":{"message":"This authorization code has been used.","type":"OAuthException","code":100}}
Observation:
- Đối với những người dùng đang mới đến đến các ứng dụng, các lỗi nói trên không xảy ra.
- Đối với người dùng cũ, cuộc gọi này không thành công với lỗi nêu trên.
- Đơn đăng ký của chúng tôi hiện đang hoạt động trong hơn 9 tháng và lỗi này chỉ xảy ra trong 7-10 ngày qua. Chúng tôi đã có hàng ngàn người dùng sử dụng thành công trước đó.
Những gì tôi đã nhận được từ Diễn đàn con:
Dưới đây là giải thích của tôi về những gì tôi đọc. Có thể không chính xác. Facebook có một số chính sách kỳ lạ đòi hỏi nhà phát triển ứng dụng phải duy trì mã 10 phút tạm thời cho đến khi mã 60 ngày thu được trong lần đăng nhập đầu tiên hết hạn. Vì vậy, chúng ta nên tạo một cookie với mã thông báo Access trên trình duyệt của người dùng. Tôi thậm chí còn có thể thấy mọi người sửa đổi mã của họ để tạo cookie.
Điều gì thực sự làm phiền tôi?
- Các giải pháp được đề xuất giả định rằng cookie mà chúng tạo ra sẽ luôn có trong trình duyệt của người dùng. Đây là một giả định tồi tệ để thực hiện, vì cookie có thể bị xóa bất cứ lúc nào.
- Tôi có một bí mật ứng dụng/ứng dụng khác mà tôi sử dụng để phát triển (ví dụ: localhost) và hoạt động hoàn hảo. Việc đăng nhập xảy ra tốt ở đó, nhưng chỉ có máy sản phẩm của nó có vấn đề.
- Vấn đề này đã không xảy ra trên máy sản xuất trong gần 10 tháng kể từ khi chúng tôi khởi chạy ứng dụng và nó đột nhiên xuất hiện. Tồi tệ nhất, tôi không thể nhận được bất kỳ hồ sơ nào về những thay đổi gần đây phá vỡ dòng chảy này.
Edit:
Hệ điều hành: Python, Google AppEngine. Chúng tôi không sử dụng bất kỳ SDK Facebook nào, chúng tôi thực hiện cuộc gọi HTTP trực tiếp đến tất cả các URL đăng nhập. Cuộc gọi không thành công: https://graph.facebook.com/oauth/access_token - chúng tôi đang chuyển appId, bí mật và mã (nhận được từ facebook) trong vòng 20 giây kể từ khi cuộc gọi đầu tiên diễn ra.
Hy vọng có đủ thông tin ở đây để cho thấy rằng mã của chúng tôi không hoàn toàn không chính xác. Bất kỳ lời khuyên/con trỏ từ những người đã gặp phải và giải quyết vấn đề này là Chào mừng. Nếu một lỗi Facebook của nó, và nhà phát triển Facebook đến để thông báo, tôi sẽ hạnh phúc hơn.
Thông số mã chỉ có thể được trao đổi cho mã thông báo truy cập của người dùng một lần. Câu hỏi của bạn thiếu thông tin có thể sử dụng được về nền tảng/ngôn ngữ bạn đang sử dụng và cuộc gọi API chính xác của bạn là gì. – CBroe
@CBroe - Cảm ơn bạn đã thông báo. Có - chúng tôi hiểu rằng thông số mã là một điều một lần và đó là lý do tại sao chúng tôi muốn trao đổi điều đó cho access_token, nhưng URL mã thông báo truy cập không thành công. Tôi đã bao gồm thông tin về nền tảng/ngôn ngữ. – Srivatsan