2013-07-14 72 views
22

Lý do có thể khiến mã thông báo hết hạn (ngoài việc yêu cầu người dùng hủy ủy quyền ứng dụng) là gì? Vấn đề của tôi là tôi có một ứng dụng với hàng nghìn người dùng, tất cả các giao tiếp API hoạt động hoàn hảo nhưng đối với một số người dùng tôi gặp lỗi invalid or expired token, mặc dù ban đầu tôi là họ là người dùng đã hủy xác thực ứng dụng nhưng Tôi đã liên lạc với một số người trong số họ và họ đã không thu hồi quyền truy cập.Twitter API - Lý do cho "mã thông báo không hợp lệ hoặc hết hạn"

Bất kỳ ý tưởng nào về các vấn đề khác có thể gây ra lỗi đó?

+1

Gần đây, twitter đã thay đổi api của nó. Bây giờ 180 tin nhắn có thể được đăng mỗi giờ từ api bên ngoài. Nếu người dùng vượt quá giới hạn, thì twitter sẽ không xác thực họ gửi bất kỳ tin nhắn nào khác. Vui lòng kiểm tra đơn đăng ký của bạn nếu vượt quá giới hạn. –

+2

cảm ơn bạn @krishnasahoo Tôi biết những thay đổi được thực hiện trong phiên bản 1.1 của API về giới hạn tốc độ. nhưng khi vượt qua giới hạn tốc độ, bạn nhận được lỗi "giới hạn tốc độ" và không phải lỗi tôi đã mô tả ở trên – Ran

+0

cảm ơn bạn đã trả lời chi tiết, tôi đã quen thuộc với những gì bạn đã đề cập ở trên và tôi không nghĩ đó là vấn đề kể từ nếu tôi không tuân thủ một trong những vấn đề đó, sẽ không có cuộc gọi API nào vượt qua và như tôi đã đề cập, nó chỉ xảy ra với một phần nhỏ người dùng của tôi. hiện tại tôi đoán là nó xảy ra với người dùng đang thay đổi tên người dùng twitter của họ, có thể khi làm như vậy người dùng sẽ tự động được xác thực từ tất cả các ứng dụng. – Ran

Trả lời

0

Có thể điều này sẽ hữu ích cho bạn. Tôi cũng gặp phải vấn đề tương tự.

Hãy tìm ra mảnh dưới của đoạn mã

$code = $tmhOAuth->user_request(array(
     'method' => 'POST', 
    'url' => $tmhOAuth->url('oauth/access_token', ''), 
    'params' => array(
      'oauth_verifier' => trim($params['oauth_verifier']), 
     ) 
    )); 

    if ($code == 200) { 
     $oauth_creds = $tmhOAuth->extract_params($tmhOAuth->response['response']); 
     // echo '<pre>';print_r($oauth_creds);exit; 


     $tmhOAuth->reconfigure(array_merge($tmhOAuth->config, array(
     'token' => $oauth_creds['oauth_token'], 
      'secret' => $oauth_creds['oauth_token_secret'], 
    ))); 

    $code = $tmhOAuth->user_request(array(
      'url' => $tmhOAuth->url('1.1/account/verify_credentials') 
    )); 


} 
+1

Lỗi này xảy ra khi mã thông báo bạn đang sử dụng hết hạn hoặc không hợp lệ. Xác minh rằng các chuỗi bạn đang sử dụng cho mã thông báo truy cập và bí mật mã thông báo truy cập là hợp lệ. Bạn có thể đã vô tình hết hạn mã thông báo và cần phải tạo lại chúng. – Amit

+0

để làm những gì yo mô tả tôi cần phải gửi lại cho người dùng twitter và tái xác thực, đây là một cái gì đó tôi muốn tránh ... – Ran

0

Bạn đã xác nhận rằng các thẻ làm việc cùng một lúc? Trong hệ thống OAuth mà tôi đã làm việc, đã xảy ra lỗi trong cách mã thông báo được lưu trữ và truy xuất một cách an toàn khiến một phần nhỏ trong số chúng bị hỏng. Nếu bạn có thể xác nhận rằng mã thông báo đã hoạt động trong quá khứ, đó là bước đầu tiên tốt.

Khi bạn truy xuất mã thông báo từ bộ nhớ, chúng có thay đổi không? Liệu họ có thể bị hỏng với cách bạn quản lý chúng?

Đặt một số thông tin đăng nhập để theo dõi thời điểm mã thông báo hoạt động và không thành công. Một mã thông báo có bao giờ bắt đầu hoạt động trở lại sau khi nó đã thất bại một lần không? Nếu bạn không sử dụng mã thông báo trong 30 ngày, nó có hết hạn không? Với nhật ký chi tiết, bạn có thể bắt đầu xác định mã thông báo đã hết hạn và tìm các mẫu được sử dụng để trỏ đến những gì có thể khiến chúng hết hạn.

Hãy chắc chắn khám phá các khả năng khác. Người dùng thu hồi mã thông báo trong Twitter như thế nào? Có dễ dàng vô tình làm điều đó không? Đối với người dùng có mã thông báo không thành công, họ có các ứng dụng được ủy quyền khác đã ngừng hoạt động không?

0

Đầu tiên của tất cả các câu hỏi hay Ran.

Tôi muốn hỏi bạn rằng bạn đã trải qua các nhà phát triển Twitter chưa ??

Đôi khi nó trở nên mơ hồ mà mã thông báo để sử dụng vì Twitter cung cấp hai cặp mã thông báo và thư viện. Một trong số đó là khóa bí mật.

Bạn cần phải chọn những mã thông báo bắt đầu bằng ID Twitter của bạn theo sau là dấu nối.

Bây giờ, câu hỏi của bạn là lỗi này xảy ra với một số người dùng của bạn. Vì vậy, đây là câu trả lời mà bản thân ứng dụng tìm thấy không rõ ràng để chọn mã thông báo.

Mặc dù tôi có thể không hoàn toàn đúng, nhưng tôi khuyên bạn nên thử giải pháp này ít nhất một lần.

1

Có thể những người dùng này có không phải bị thu hồi quyền truy cập. Nhưng trong kinh nghiệm của tôi một mã thông báo truy cập cũng có thể hết hạn sau khi người dùng (trong trường hợp kiểm tra: tôi) thay đổi mật khẩu của mình.

Khi người dùng thực hiện điều đó, bạn không còn có thể sử dụng API REST của API luồng trên phạm vi của người dùng đó. Vui lòng điều chỉnh ứng dụng của bạn để xử lý tình huống đó. Thu hồi phiên của người dùng, vì vậy khi quay trở lại ứng dụng của bạn, họ có thể được chuyển hướng đến Twitter một lần nữa để bắt đầu quy trình mã thông báo truy cập OAuth mới. Hoặc gửi cho anh/cô ấy một e-mail để yêu cầu kết nối lại. Vimeo/Windows/...là một số người xử lý mã thông báo hết hạn với e-mail.

Hãy vui vẻ!

15

Kiểm tra tính toàn vẹn của mã thông báo truy cập bất kỳ lúc nào bằng cách gọi số GET account/verify_credentials khi sử dụng mã thông báo truy cập đó.

của nó đề cập và nghiên cứu tôi đến để biết rằng:

thẻ truy cập của bạn sẽ không hợp lệ nếu người dùng từ chối một cách rõ ràng ứng dụng của bạn từ các thiết lập của họ hoặc nếu một quản trị Twitter tạm ngưng ứng dụng của bạn. Nếu ứng dụng của bạn bị tạm ngưng, sẽ có ghi chú trên trang ứng dụng của bạn cho biết rằng ứng dụng đã bị tạm ngưng.

Tại sao mã thông báo truy cập twitter oauth của tôi không hợp lệ/hết hạn?

Kiểm tra bài đăng này: invalid/expired access tokens.

Có một bài trong nhóm google nói rằng:

Bạn không nhận được một cơ hội thứ hai, và điều này là do thiết kế. Yêu cầu OAuth có chữ ký duy nhất; khi một yêu cầu cụ thể được gửi, không thể gửi lại . Nếu họ nhập mã pin chính xác, tất cả đều tốt, bạn sẽ nhận được mã thông báo truy cập. Nếu họ nhập sai mã PIN, bạn nhận được 401 trái phép - đó là được mong đợi. Nhưng nếu sau đó thử lại để nhập mã pin, ngay cả ghim chính xác hiển thị là trái phép.

Kiểm tra điều này link để tham khảo ở trên.

Một số gợi ý của nhân viên twitter cho cùng một vấn đề:

Tôi đoán có hai điều tôi sẽ đề nghị vào thời điểm này: 1.) Tới cài đặt ứng dụng của bạn và sử dụng "Reset phím" tab để đặt lại khóa và bí mật của người tiêu dùng, sau đó cập nhật các giá trị đó trong ứng dụng và xác minh rằng bạn vẫn thấy hành vi tương tự. 2.) Hãy thử qua oauth_callback trong cuộc gọi request_token của bạn. Thành thật mà nói tôi không nghĩ rằng điều này sẽ làm cho một sự khác biệt, nhưng tôi muốn thử và nghiêm ngặt như tôi có thể ở đây.

Ngoài ra kiểm tra discussion này nói:

Bạn cần phải sử dụng oauth_token và oauth_token_secret trở về từ các oauth/access_token gọi thay vì một trong cài đặt của ứng dụng của bạn trong dev.twitter.com

+0

cảm ơn bạn đã trả lời phức tạp, tôi đã quen thuộc với những gì bạn đã đề cập ở trên và tôi không nghĩ rằng đó là vấn đề kể từ khi tôi không tuân thủ một trong những vấn đề đó, không ai trong số các cuộc gọi API sẽ vượt qua và như tôi đã đề cập nó chỉ xảy ra với một phần nhỏ người dùng của tôi. hiện tại tôi đoán là nó xảy ra với người dùng đang thay đổi tên người dùng twitter của họ, có thể khi làm như vậy người dùng sẽ tự động được xác thực từ tất cả các ứng dụng. – Ran

+0

Vui lòng xác nhận nếu người dùng thay đổi có thông tin chính về tài khoản. Nếu có một cái gì đó mà ứng dụng twitter không thể tin tưởng, nó sẽ từ chối các thẻ. Vui lòng đọc faqs twitter API https://dev.twitter.com/docs/faq. Để khắc phục sự cố, bạn nên đọc Khắc phục sự cố OAuth 1.0A - Liên kết - https://dev.twitter.com/discussions/204 –

+0

Vâng, tôi đã sử dụng user.accessToken/Secret .. và nó hoạt động tốt, ngay bây giờ nó trở về không xác định, nhưng App AccessToken/Secret vẫn hoạt động mà không có vấn đề gì. – Hamza

3

Ngoài những nhận xét mà mọi người khác đã thực hiện, đôi khi api twitter sẽ trả về lỗi "mã thông báo không hợp lệ" khi mã thông báo không phải là vấn đề. Tôi đã nhận thấy nó nhiều nhất khi tôi đã xây dựng một chuỗi yêu cầu không phân tích cú pháp chính xác. Ví dụ, một khi tôi đã nhận được lỗi đó khi tôi đã đi qua trong screen_name của có biểu tượng mà không phải là URI-encodable.Tôi cũng đã nhận được nó khi tôi thông qua các giá trị trống như thế này (nơi con trỏ trống):

https://api.twitter.com/1/followers.json?cursor=&screen_name=whatevah 

Bạn có thể cho chúng tôi biết cụ thể về các cuộc gọi trả lại lỗi này không?

0

My God's answer là đúng nhưng tôi sẽ chia sẻ my answer from another question giải thích làm thế nào nó có thể là đồng hồ của máy tính của bạn:

Nếu dòng chảy OAuth của bạn đang làm việc một ngày nào đó và thất bại tiếp theo, kiểm tra máy tính của bạn đồng hồ. Tôi đã chạy một hộp Vagrant mà bằng cách nào đó đã có thời gian của nó thiết lập để ngày trước đó, mà gây ra các API Twitter để trở về {"mã": 89, "message": "Mã thông báo không hợp lệ hoặc hết hạn."}. Điều này cũng có thể xuất hiện dưới dạng dấu thời gian 401 ngoài giới hạn. Bạn có thể sử dụng lệnh này để cập nhật đồng hồ của bạn trong Ubuntu:

sudo ntpdate time.nist.gov 

Alternative method nếu ntpdate không có sẵn trên hệ thống của bạn:

sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z" 
2

tôi đã nhận được cùng một lỗi sau đó tôi đã thay đổi (access_token) to (access_token_key) và nó làm việc cho tôi.

Tôi hy vọng nó sẽ giúp ai đó.

0

nếu Mã thông báo truy cập = 738629462149844993-FcWHjfcucCLGEosyGGQ38qI ****** iC của bạn sau đó đừng quên đề cập đến dấu nối (-) tiếp theo là USERID của bạn.

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