PHP:
<?php
if (!empty($_SESSION['user'])) {
header("Location: /account/earn/links");
}
$time = time();
$data = array();
$config = new config();
$ip = func::clear($_SERVER['REMOTE_ADDR']);
$meta =func::clear($_SERVER['HTTP_USER_AGENT']);
$vk_url = 'http://oauth.vk.com/authorize';
$vk_params = array(
'client_id' => $config->vk_client_id,
'redirect_uri' => $config->vk_redirect_uri,
'scope' => 'email,photos',
'response_type' => 'code'
);
$data['vk_auth'] = $vk_url . "?" . urldecode(http_build_query($vk_params));
if (isset($_GET['code'])) {
$result = false;
$vk_params = array(
'client_id' => $config->vk_client_id,
'client_secret' => $config->vk_client_secret,
'code' => $_GET['code'],
'redirect_uri' => $config->vk_redirect_uri
);
//ВОТ ДО СЮДА ДОХОДИТ, А ДАЛЬШЕ НЕ ИДЁТ***
$token = json_decode(file_get_contents('https://oauth.vk.com/access_token' . '?' . urldecode(https_build_query($vk_params))), true);
if (isset($token['access_token'])) {
$vk_params = array(
'user_ids' => $token['user_id'],
'fields' => 'user_id,first_name,last_name,photo_100',
'access_token' => $token['access_token']
);
$userInfo = json_decode(file_get_contents('https://api.vk.com/method/users.get?&v=5.0' . '?' . urldecode(http_build_query($vk_params))), true);
if (isset($userInfo['response'][0]['id'])) {
$userInfo = $userInfo['response'][0];
$result = true;
}
}
if ($result) {
$uid = $userInfo['id'];
$email = $token["email"];
$first_name = $userInfo['first_name'];
$last_name = $userInfo['last_name'];
$screen_name = $first_name . ' ' . $last_name;
$photo_100 = $userInfo['photo_100'];
$ref_1 = 0;
$db->Query("SELECT * FROM users WHERE uid = '{$uid}'");
$user_data = $db->FetchArray();
if($user_data['ban'] == '2'){
die(header('location: /ban'));
}
$db->Query("SELECT * FROM lider WHERE id = '1'");
$lider_data = $db->FetchArray();
$lider = $lider_data['user_id'];
$ref_1 = $lider;
$ref_2 = 0;
$ref_3 = 0;
if (isset($_COOKIE['referer']) && !empty($_COOKIE['referer'])) {
$ref = func::clear($_COOKIE['referer'], 'int');
$db->Query("SELECT * FROM users WHERE id = '{$ref}'");
if ($db->NumRows() > 0) {
$db->Query("SELECT * FROM users_ref WHERE user_id = '{$ref}'");
$ref_dat = $db->FetchArray();
$ref_1 = $ref;
$db->Query("UPDATE users SET refs = refs + 1 WHERE id = '{$ref_1}'");
}
}
$db->Query("SELECT id, uid FROM users WHERE uid = {$uid}");
if ($db->NumRows() > 0) {
$user = $db->FetchArray();
$id = $user['id'];
$_SESSION['user'] = $id;
$db->Query("INSERT INTO auth (user_id,ip,time,meta) VALUES ('{$id}','{$ip}','{$time}','{$meta}')");
$db->Query("UPDATE users SET email = '{$email}', screen_name = '{$screen_name}', photo_100 = '{$photo_100}', ip = '{$ip}' WHERE id = '{$id}'");
header('location: /account/earn/links');
} else {
if (isset($_COOKIE['httpref'])) {
$httpref = func::clear($_COOKIE['httpref']);
} else $httpref = '0';
$db->Query("INSERT INTO users (uid,email,screen_name,photo_100,ip,date_reg)
VALUES ('{$uid}','{$email}','{$screen_name}','{$photo_100}','{$ip}','{$time}')");
$id = $db->LastInsert();
$db->Query("INSERT INTO users_conf (user_id,httpref) VALUES ('{$id}','{$httpref}')");
$db->Query("INSERT INTO users_ref (user_id,ref_1,to_ref_1)
VALUES ('{$id}','{$ref_1}','0')");
$_SESSION['user'] = $id;
$db->Query("INSERT INTO auth (user_id,ip,time,meta) VALUES ('{$id}','{$ip}','{$time}','{$meta}')");
header('location: /account/earn/links');
}
}
}
$ok_url = 'http://www.odnoklassniki.ru/oauth/authorize';
$ok_params = array(
'client_id' => $config->ok_client_id,
'response_type' => 'code',
'redirect_uri' => $config->ok_redirect_uri
);
$data['ok_auth'] = $ok_url . '?' . urldecode(http_build_query($ok_params));
$fb_url = 'https://www.facebook.com/v2.11/dialog/oauth';
$fb_params = array(
'client_id' => $config->fb_client_id,
'redirect_uri' => $config->fb_redirect_uri,
'response_type' => 'code',
'scope' => 'email'
);
$data['fb_auth'] = $fb_url.'?'.urldecode(http_build_query($fb_params));
new gen('login', $data);
При получении access_token истекает время действия кода, при чем когда делаешь запрос через ajax. Если просто перейти по урлу, то я вижу этот токен. В чем проблема, учитывая то, что этот код, как написано в доках живет час?
- oauth
- ajax
- javascript
- вконтакте
Sleeping Owl
1411 золотой знак2 серебряных знака9 бронзовых знаков
задан 26 апр 2013 в 3:25
ИвоИво
211 серебряный знак3 бронзовых знака
1
-
Вы для чего получаете
access_token
?17 окт 2015 в 22:12
1 ответ
Deleted
3711 золотой знак5 серебряных знаков13 бронзовых знаков
ответ дан 26 апр 2013 в 5:41
QuissQuiss
9641 золотой знак14 серебряных знаков27 бронзовых знаков
1
-
Не знаю, что и сказать, потому что с одной стороны это решение для сервер-сайд. А с другой стороны для меня работает такой вариант: oauth.vk.com/… Т.е. я миную получение code
26 апр 2013 в 6:21
Токены действуют 1 год и получаете вы его или обновляете процедура одинаковая и бесполезная. Но т.к. Яндекс это мегакорпорация Русского масштаба, то приходится мириться с этим хаосом и просто работать по инструкции. Кстати Инструкции штука полезная.
Итак вы получили в логах:
Array
(
[code] => 403
[response] => {«error_message»:»Used OAuth token is invalid or expired»,»error_code»:»INVALID_OAUTH_TOKEN»}
)
Это значит ваш токен для Вебмастера сгорел и пора получать новый.
Как переполучить токен ?
- Создавая новое приложение получаем id https://oauth.yandex.ru/
- Идем по адресу oauth.yandex.ru/authorize?response_type=token&client_id=ID_приложения
- там все разрешаем и получаем Токен на 1 год, все
Полученный токен вставляем в ваш скрипт. Вы будете возвращаться к этой инструкции ежегодно, так что забукмарчите эту заметку.
Ну и сказать пару слов о Опишечке Вебмастера и Метрики Яндекс, да и других сервисов..
Это прекраснейшая вещь. Не зарастет тропа любви к Яндексу.
Приложение в виде сайта.
Делаю авторизацию как по гайду
Стопорюсь на получение токена пишет:
{"error":"invalid_grant","error_description":"Code is invalid or expired."}
Моя ссылка:
https://oauth.vk.com/access_token?client_id=мойид&client_secret=мойключ&redirect_uri=мойурл&code=257db363d39654cac7
Перерыл весь гугл так и ненашёл ответа. Подскажите в чём проблема.
-
Вопрос заданболее трёх лет назад
-
2466 просмотров
Так решилась моя проблема.
Вообщем ситуация такая, нужно для получения code заходить по http, а не по https.
Пригласить эксперта
Почему не испольуете Auth Widget?
// EDIT
Если проблемы в серверной части:
1) проверьте настройки приложения ВК (callback url итд)
2) проверьте ссылки, которые генерируете
-
Показать ещё
Загружается…
09 июн. 2023, в 23:05
80000 руб./за проект
09 июн. 2023, в 22:45
1000 руб./за проект
09 июн. 2023, в 22:39
1000 руб./в час
Минуточку внимания
При самой первой авторизации на сайте получаю такую ошибку, но при этом авторизация выполняется у пользователя:
TokenError: Code is invalid or expired. at Strategy.OAuth2Strategy.parseErrorResponse (/srv/13case/node_modules/passport-oauth2/lib/strategy.js:320:12) at Strategy.parseErrorResponse (/srv/13case/node_modules/passport-vkontakte/lib/passport-vkontakte/strategy.js:176:54) at Strategy.OAuth2Strategy._createOAuthError (/srv/13case/node_modules/passport-oauth2/lib/strategy.js:367:16) at /srv/13case/node_modules/passport-oauth2/lib/strategy.js:166:45 at /srv/13case/node_modules/oauth/lib/oauth2.js:191:18 at passBackControl (/srv/13case/node_modules/oauth/lib/oauth2.js:132:9) at IncomingMessage.<anonymous> (/srv/13case/node_modules/oauth/lib/oauth2.js:157:7) at emitNone (events.js:91:20) at IncomingMessage.emit (events.js:185:7) at endReadableNT (_stream_readable.js:974:12)
Код обработчика:
passport.use(new VkStrategy( { clientID: config.get('vkID'), clientSecret: config.get('vkSecret'), callbackURL: config.get('vkCb') + '/auth/vk/callback' }, function verify(accessToken, refreshToken, params, profile, done) { process.nextTick(function () { return done(null, { userid: profile.id, username: profile.displayName, photoUrl: profile.photos[0].value, profileUrl: profile.profileUrl }); }); } ));
Код роутерингов:
app.get('/auth/vk', passport.authenticate('vkontakte'), function(req, res){}); app.get('/auth/vk/undefined', passport.authenticate('vkontakte'), function(req, res){}); app.get('/auth/vk/callback', passport.authenticate('vkontakte', { failureRedirect: '/' }), function(req, res) { res.redirect(req.headers.referer); });
В чем проблема?