Мой первый ответ и комментарии остаются в силе, но я собираюсь показать вам, как вы можете автоматизировать процесс авторизации с помощью nwjs.
Сначала вам нужно включить неявный поток для вашего приложения OAuth — на вкладке «Безопасность».
В этой демонстрации я использую http://localhost:3000/callback
в качестве URI перенаправления для моего приложения OAuth. Поэтому вам нужно добавить его в качестве дополнительного URL-адреса перенаправления вашего приложения OAuth. Также заполните все необходимые учетные данные в authorization.html
.
сервер.js
var fs = require('fs')
var path = require('path')
var http = require('http')
var url = require('url')
var qs = require('querystring')
var child = require('child_process')
var nw = null
var server = http.createServer()
server.on('request', function (req, res) {
if (req.url == '/connect') {
var dpath = path.resolve(__dirname)
nw = child.spawn('nw', [dpath])
res.end()
}
else if (req.url == '/callback') {
var fpath = path.resolve(__dirname, 'token.html')
var body = fs.readFileSync(fpath, 'utf8')
res.writeHead(200, {'content-type': 'text/html'})
res.end(body)
}
else if (/^\/token/.test(req.url)) {
var uri = url.parse(req.url)
var query = qs.parse(uri.query)
console.log(query)
nw.on('close', function (code, signal) {
console.log('NW closed')
})
nw.kill('SIGHUP')
res.end()
}
})
server.listen(3000, function () {
console.log('HTTP server listening on port ' + 3000)
})
Начните с:
node server.js
Затем перейдите к http://localhost:3000/connect
, пока вы можете использовать свой браузер.
авторизация.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>Client Side Implicit OAuth Flow</title>
<script type="text/javascript" charset="utf-8">
var config = {
client_id: '[CLIENT_ID]',
redirect_uri: '[REDIRECT_URL]',
username: '[USERNAME]',
password: '[PASSWORD]'
}
var authorize_url = 'https://www.instagram.com/oauth/authorize/?' +
'client_id=' + config.client_id + '&' +
'redirect_uri=' + config.redirect_uri + '&' +
'response_type=token'
document.addEventListener('DOMContentLoaded', function (e) {
var iframe = document.querySelector('iframe')
iframe.setAttribute('src', authorize_url)
iframe.onload = function (e) {
var doc = this.contentWindow.document
// login
if (doc.querySelector('[name=username]')) {
doc.querySelector('[name=username]').value = config.username
doc.querySelector('[name=password]').value = config.password
doc.querySelector('[type=submit]').click()
}
// authorize
else if (doc.querySelector('[value=Authorize]')) {
doc.querySelector('[value=Authorize]').click()
}
}
}, false)
</script>
</head>
<body>
<iframe src=""></iframe>
</body>
</html>
Как только вы нажмете этот маршрут, будет создан новый процесс, и authorize.html
будет выполнено. Просто имейте в виду, что NWjs требует, чтобы на вашем сервере были установлены некоторые графические библиотеки, так что это не совсем безголовый браузер.
Там браузер переходит к URL-адресу авторизации внутри iframe. В зависимости от того, вошли ли вы в систему или уже авторизовались, загружаются разные страницы приложения. Этот код просто заполняет ваше имя пользователя и пароль и нажимает на несколько ссылок.
После завершения потока OAuth вы получите хэш access_token
as в URL-адресе. Как вы, возможно, знаете, браузер не отправляет эту часть URL-адреса на сервер, поэтому в маршруте /callback
сервер возвращает другую страницу с именем token.html
, единственная цель которой — извлечь токен доступа из хэша URL-адреса и вернуть его в виде строки запроса. на маршруте /token
.
токен.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>Client Side Implicit OAuth Flow</title>
<script type="text/javascript" charset="utf-8">
var config = {
callback_uri: 'http://localhost:3000/token'
}
var access_token = window.location.hash.replace('#access_token=', '')
var url = config.callback_uri + '?access_token=' + access_token
window.location.href = url
</script>
</head>
<body>
</body>
</html>
После запуска этого примера вы увидите свой токен доступа в командной строке:
$ node server.js
HTTP server listening on port 3000
{ access_token: '1404767371.e5610d0.3381e9a2fd7340d8b90b729f407949d2' }
NW closed
Вы можете скачать все файлы с здесь.
05.12.2015