2009-09-28 27 views
8

Tôi đang gặp sự cố với xác thực oauth của Twitter và sử dụng url gọi lại.Twitter O-Auth Url gọi lại

tôi mã hóa trong php và sử dụng mã mẫu tham chiếu bởi wiki twitter, http://github.com/abraham/twitteroauth

tôi đã nhận mã đó, và thử một bài kiểm tra đơn giản và nó làm việc độc đáo. Tuy nhiên tôi muốn chỉ định một cách có lập trình url gọi lại, và ví dụ này không hỗ trợ điều đó.

Vì vậy, tôi nhanh chóng sửa đổi phương pháp getRequestToken() để thực hiện trong một tham số và bây giờ nó trông như thế này:

function getRequestToken($params = array()) { 
    $r = $this->oAuthRequest($this->requestTokenURL(), $params); 
    $token = $this->oAuthParseResponse($r); 
    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); 
    return $token; 
} 

và cuộc gọi của tôi trông như thế này

$tok = $to->getRequestToken(array('oauth_callback' => 'http://127.0.0.1/twitter_prompt/index.php')); 

Đây là thay đổi duy nhất Tôi đã thực hiện và chuyển hướng hoạt động như một nét duyên dáng, tuy nhiên tôi gặp phải lỗi khi tôi thử và sử dụng quyền truy cập mới được cấp để thử và thực hiện cuộc gọi. Tôi nhận được lỗi "Không thể xác thực bạn". Ngoài ra, ứng dụng không bao giờ thực sự được thêm vào các kết nối được người dùng ủy quyền.

Bây giờ tôi đọc thông số kỹ thuật và tôi nghĩ tất cả những gì tôi phải làm là chỉ định tham số khi nhận mã thông báo yêu cầu. Ai đó có thể dày dạn hơn một chút trong oauth và twitter có thể cho tôi một bàn tay? Cảm ơn bạn

Trả lời

7

Tôi nghĩ rằng điều này được cố định bởi twitter bây giờ hoặc bạn có thể đã bỏ lỡ để cung cấp một url gọi lại mặc định trong cài đặt ứng dụng của bạn, được yêu cầu cho url gọi lại động để làm việc như được đề cập bởi những người khác ở trên.

Bất kỳ trường hợp nào, tôi nhận được thao tác này bằng cách chuyển tham số oath_callback trong khi truy xuất mã thông báo yêu cầu. Tôi đang sử dụng thư viện PHP twitter-async và phải thực hiện một tinh chỉnh nhỏ để làm cho thư viện vượt qua url gọi lại.

Nếu bạn đang sử dụng twitter-async, sự thay đổi là dưới đây:

sửa đổi getRequestToken và getAuthenticateURL chức năng để lấy url callback như tham số

public function getRequestToken($callback_url = null) 
    { 
    $params = empty($callback_url) ? null : array('oauth_callback'=>$callback_url); 
    $resp = $this->httpRequest('GET', $this->requestTokenUrl, $params); 
    return new EpiOAuthResponse($resp); 
    } 


public function getAuthenticateUrl($callback_url = null) 
    { 
    $token = $this->getRequestToken($callback_url); 
    return $this->authenticateUrl . '?oauth_token=' . $token->oauth_token; 
    } 

Và vượt qua url gọi lại từ mã PHP của bạn.

$twitterObj->getAuthenticateUrl('http://localhost/twitter/confirm.php'); 
+0

Chúc mừng - đó chính xác là sửa đổi tôi cần. – Gavin

+0

@Gavin - thật tốt khi biết điều đó đã giúp bạn – Murukesh

+1

Đối với bất kỳ ai quan tâm, đây là một phần của twitter-async – Relequestual

-2

Twitter không tôn trọng tham số oauth_callback và sẽ chỉ sử dụng thông số được chỉ định trong cài đặt ứng dụng đã đăng ký.

Nó cũng không cho phép 127.0.0.1 hoặc tên máy cục bộ trong cuộc gọi lại đó, vì vậy tôi đã thiết lập http://dev.twipler.com được thiết lập cho 127.0.0.1 trong DNS để bạn có thể sử dụng an toàn;

http://dev.twipler.com/twitter_prompt/index.php 
+0

Twitter hỗ trợ URL oauth_callback động cho mỗi OAuth 1.0a. http://tools.ietf.org/html/rfc5849#section-2.1 – abraham

1

@Ian, twitter giờ đây cho phép 127.0.0.1 và đã thực hiện một số thay đổi gần đây khác.

@jtymann, kiểm tra câu trả lời của tôi ở đây và xem nếu nó giúp

Twitter oauth_callback parameter being ignored!

GL

chuông

1

thậm chí tôi đã nhận được 401 lỗi .. nhưng giải quyết nó .. trong khi đăng ký ứng dụng của bạn lên twitter, bạn cần phải cung cấp url gọi lại ... như http://localhost:8080.

tôi đã thực hiện việc này bằng cách sử dụng java ... vì vậy mã của tôi là: String CallbackURL = "http: // localhost: 8080/tweetproj/index.jsp"; provider.retrieveRequestToken (consumer, CallbackURL);

nơi tweetproj là tên dự án của tôi và index.jsp chỉ là một trang jsp ...

Hy vọng điều này sẽ giúp may u ...

0

Sau khi người dùng cho phép các ứng dụng trên twitter.com và họ quay trở lại URL gọi lại của bạn, bạn phải trao đổi mã thông báo yêu cầu cho mã thông báo truy cập.

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