i am using this library
https://github.com/artdarek/oauth-4-laravel
here is my code
public function loginWithYahoo() {
// get data from input
$token = Input::get( 'oauth_token' );
$verify = Input::get( 'oauth_verifier' );
// get yahoo service
$yh = OAuth::consumer( 'Yahoo' );
// if code is provided get user data and sign in
if ( !empty( $token ) && !empty( $verify ) ) {
// This was a callback request from yahoo, get the token
$token = $yh->requestAccessToken( $token, $verify );
$xid = array($token->getExtraParams());
$result = json_decode( $yh->request( 'https://social.yahooapis.com/v1/user/'.$xid[0]['xoauth_yahoo_guid'].'/profile?format=json' ), true );
dd($result);
}
// if not ask for permission first
else {
// get request token
$reqToken = $yh->requestRequestToken();
// get Authorization Uri sending the request token
$url = $yh->getAuthorizationUri(array('oauth_token' => $reqToken->getRequestToken()));
// return to yahoo login url
return Redirect::to( (string)$url );
}
}.
I am getting following error.. can any one please give some hint???Thanks in advance
Call to undefined method OAuth\OAuth2\Service\Yahoo::requestRequestToken()
Use this code:
$url = $yh->getAuthorizationUri();
return redirect((string)$url);
instead of this code:
// get request token
$reqToken = $yh->requestRequestToken();
// get Authorization Uri sending the request token
$url = $yh->getAuthorizationUri(array('oauth_token' => $reqToken->getRequestToken()));
// return to yahoo login url
return Redirect::to( (string)$url );
Related
My Code given below:
Route::get('/facebook', 'ApiUserController#socialConnect');
public function socialConnect()
{
// get data from input
$code = Input::get( 'code' );
// get fb service
$fb = OAuth::consumer( 'Facebook' );
// check if code is valid
// if code is provided get user data and sign in
if ( !empty( $code ) ) {
// This was a callback request from facebook, get the token
$token = $fb->requestAccessToken( $code );
// Send a request with it
$result = json_decode( $fb->request( '/me' ), true );
$message = 'Your unique facebook user id is: ' . $result['id'] . ' and your name is ' . $result['name'];
echo $message. "<br/>";
//Var_dump
//display whole array().
dd($result);
}
// if not ask for permission first
else {
// get fb authorization
$url = $fb->getAuthorizationUri();
// return to facebook login url
return Redirect::to( (string)$url );
}
}
Error : Method [getData] does not exist on Redirect.
It does always bring this error while invoking http://localhost:8000/v1/facebook even though I added the url http://localhost:8000/v1/facebook in Valid OAuth redirect URIs
Please suggest the same
$duration = Benchmarking::end('application');
$duration = ($duration * 1000) . 'ms';
Log::info($response->getStatusCode() . ' ' . $request->path() . ' :: ' . $duration);
if (!Config::get('app.debug'))
{
return $response;
}
$data = $response->getData();
if (is_array($data)) {
return $response;
}
$data->queryLog = DB::getQueryLog();
$data->responseTime = $duration;
$response->setData($data);
return $response;
This filter is creating problem what can we fixed it out
Just need to update the response in json format works fine
There is a very simple package for social auth: https://github.com/laravel/socialite
I already generated a token from my api login using this code:
if ($isCorrect == 1) {
$key = "example_key";
$token = array(
"iss" => "http://mywebsite.com",
"iat" => 1356999524,
"nbf" => 1357000000,
'data' => [
'userName' => $UserName,
]
);
$jwt = JWT::encode($token, $key);
$decoded = JWT::decode($jwt, $key, array('HS256'));
$unencodedArray = ['jwt' => $jwt];
echo json_encode($unencodedArray);
}
So I have a token now, how can I use the token to other api? What I mean is, i dont want anybody to perform this api without logging in.
This is my sample API method:
$app->get('/api/user/{UserId}', function($request){
//Select query here
});
This is the library i used: https://github.com/firebase/php-jwt
Thank you very much for your help.
You Just need to add a middleware method for your API
that will check the validation of the JWT token with that user name
Then pass the request to the API
`
$app->add( function ( $Req ,$Res ,$next ){
//get token,username from the user
$token= $Req->getParsedBodyParam('token');
$user_name=$Req->getParsedBodyParam('username');
//check for empty of any of them
if(empty ($token)|| empty($user_name) ){
$message=array("success"=>false,'message'=>'Some data is empty');
return $Res->withStatus(401)
-> withJson($message);
}
else{
//Validation test for the taken for this user name
$decoded_token = $this->JWT::decode($token, 'YourSecret key', array('HS256'));
if( isset($decoded_token->data->userName) && $decoded_token->data->userName == $user_Name ){
$message=array('message'=>'the token is valid');
//pass through the next API
$Res=$next($Req,$Res->withJson($message));
return $Res;
}
else{
$message=array("sccess"=>false,"message"=>"Token Validation Error",'code'=>201);
return $Res->withStatus(401)
->withJson($message);
}
}
});
`
Here's my issue, I have contact form 7 for wordpress installed and during the wpcf7_before_send_mail I make a call to an API, I need to invalidate the form if the API returns an error then I need to invalidate the request and return the error passed back from the API call.
I set a flag to false on API failure and the error message is also stored but my form is going through as success despite the failure I induce.
add_action("wpcf7_before_send_mail", "wpcf7_send_contact_builder");
function wpcf7_send_contact_builder($form) {
$submission = WPCF7_Submission::get_instance();
$wpcf7_data = $submission->get_posted_data();
... api call and set $success to true if ok and false if not ...
if (!$success) {
$form->status = 'validation_failed (statuscode:' . $xml->status->statuscode[0] . ').';
$form->valid = false;
$form->response = $xml->status->statusdesc[0];
return $forml
}
}
I've also tried using:
$form->invalidate('validation_failed (statuscode:' . $xml->status->statuscode[0] . ').', $xml->status->statusdesc[0]);
But whichever way I am unable to prevent the success email being sent and the form validates as successful. Debugging proved that the !success in the if statement is working and the code contained is added to the variable. I also tried as if form was an array ($form['valid'] = false) but this also didn't work and the form submits as successful. Any ideas of what I'm missing here? I've omitted the code for the API call itself and the determining of the correct form id, both of these work correctly, only the form I'm after is parsed and the API call is returning the expected data.
I needed the same. After going through the CF7 plugin files, I found the following solution:
//To make it working, we must need at least CF7-v5.0;
add_action( 'wpcf7_before_send_mail', 'cf7_validate_api', 15, 3 );
function cf7_validate_api($cf7, &$abort, $submission){
if ( $cf7->id() !== 789 ) //CF7 post-id from admin settings;
return;
$errMsg = '';
//$submission = WPCF7_Submission::get_instance();
$postedData = $submission->get_posted_data();
//$postedData['more-data'] = 'something';
unset($postedData['not-sending-data']);
//-----API posting------
$url = "http://my-web.com/wp-admin/admin-ajax.php?action=get-something";
$username = 'apiUserName';
$password = 'apiUserPass';
$args = [
'headers' => [
'Authorization' => "Basic ".base64_encode( $username . ':' . $password ),
'Accept' => 'application/json; charset=utf-8', // The API returns JSON
//'Content-Type' => 'application/json; charset=utf-8'
],
'body' => $postedData
];
$response = wp_remote_post( $url, $args );
//------------------
if( is_wp_error( $response ) ){
$error_message = $response->get_error_message();
$errMsg = "Something went wrong:\n{$error_message}";
} else {
$response_body = wp_remote_retrieve_body( $response );
$data = json_decode( $response_body );
if( empty($data) || $data->status==0 ){ //API validation error!
$errMsg = $data->msg->title."\n".$data->msg->description;
}
}
if( $errMsg ){ //do not send mail;
//$cf7->skip_mail = true; //for older versions!
$abort = true; //==> Here, it is with 'called by reference' since CF7-v5.0 :)
$submission->set_status( 'validation_failed' );
//$submission->set_response( $cf7->message( 'validation_error' ) ); //msg from admin settings;
$submission->set_response( $cf7->filter_message($errMsg) ); //custom msg;
}
}
Hopefully, it will help someone. Happy Coding :)
I'm getting the following error:
I'm using artdarek's oauth-4-laravel but there doesn't seem to be much support in the Issues area.
My code is as follows:
public function tumblrLogin()
{
$oauth_token = Input::get( 'oauth_token' );
$oauth_verifier = Input::get( 'oauth_verifier' );
$tumblr = OAuth::consumer('Tumblr', 'http://30daychallenges.net/auth/tumblr/');
if ( !empty( $oauth_token ) && !empty( $oauth_verifier ) )
{
$token = $tumblr->retrieveAccessToken('Tumblr');
$tumblr->requestAccessToken( $oauth_token, $oauth_verifier, $token->getRequestTokenSecret() );
$result = json_decode( $tumblr->request('user/info'), true );
dd($result);
}
else
{
// get request token
$token = $tumblr->requestRequestToken();
// get Authorization Uri sending the request token
$url = $tumblr->getAuthorizationUri(array('oauth_token' => $token->getRequestToken()));
return Redirect::to( (string)$url );
}
}
The error looks like it's coming from
$token = $tumblr->requestRequestToken();
But I can't see why - anyone experienced this error before?
Oh my. I feel like such an idiot.
In /app/config/packages/artdarek/oauth-4-laravel/config.php I had the credentials in the array, however the array keys were consumer_key and consumer_secret, as Tumblr's API had suggested.
The oauth-4-laravel package expects these to be client_id and client_secret uniformly, so this is my bad.
I'm using artdarek/oauth-4-laravel so the user can login via Facebook and post to their feed. I'm able to login in via Facebook using the following bit of code
// get data from input
$code = Input::get( 'code' );
// get fb service
$fb = OAuth::consumer( 'Facebook' );
// check if code is valid
// if code is provided get user data and sign in
if ( !empty( $code ) ) {
$token = $fb->requestAccessToken( $code );
$_SESSION['facebook_access_token'] = $token->getAccessToken();
// Send a request with it
$user = json_decode( $fb->request( '/me' ), true );
...
And everything works as expected. In the App I also have a share button, but when I try and share I get the following error
{"error":{"type":"OAuth\\Common\\Http\\Exception\\TokenResponseException","message":"Failed to request resource.","file":"\/var\/www\/html\/myApp\/vendor\/lusitanian\/oauth\/src\/OAuth\/Common\/Http\/Client\/StreamClient.php","line":68}}
Here is the code that I'm using for posting
if ( isset($_SESSION['facebook_access_token']) ) {
$fb = OAuth::consumer( 'Facebook' );
// $user = json_decode( $fb->request( "/me?access_token={$_SESSION['facebook_access_token']}" ), true );
$postMessage = json_decode( $fb->request
(
'POST',
"/me/feed?access_token={$_SESSION['facebook_access_token']}",
array (
'message' => 'This is a test message'
)
),
true );
return $postMessage;
}
I know that the $_SESSION[] is set because I ran the commented out line first and it was returning what I expected. But the code for posting on the wall is giving me that error mentioned earlier.
Please help.
Thanks
I found the mistake ... The call is supposed to be as follows
$postMessage = json_decode( $fb->request
(
"/me/feed?access_token={$_SESSION['facebook_access_token']}",
'POST',
array (
'message' => 'This is a test message'
)
),
true );
The route is supposed to be first and then the POST.