OAuth2,带有nodejs api和标准javascript应用程序
我正在尝试创建一种插件,用户只需将其添加到网站,它就会对我的应用程序进行COR调用,并返回JSON,由客户端javascript处理 这是我想要的工作方式,但现在我试图确保用户在被允许从我的服务器端应用程序接收任何JSON之前登录到我的应用程序 从这里开始,我将把Node.js API称为服务器,把straight js插件称为客户端 我在服务器上找到了一个处理OAuth2的node的npm插件,但我不确定我是否真正理解如何使用它。这是我在客户端找到的解决方案 客户端->应用程序初始值设定项:OAuth2,带有nodejs api和标准javascript应用程序,javascript,node.js,express,oauth-2.0,Javascript,Node.js,Express,Oauth 2.0,我正在尝试创建一种插件,用户只需将其添加到网站,它就会对我的应用程序进行COR调用,并返回JSON,由客户端javascript处理 这是我想要的工作方式,但现在我试图确保用户在被允许从我的服务器端应用程序接收任何JSON之前登录到我的应用程序 从这里开始,我将把Node.js API称为服务器,把straight js插件称为客户端 我在服务器上找到了一个处理OAuth2的node的npm插件,但我不确定我是否真正理解如何使用它。这是我在客户端找到的解决方案 客户端->应用程序初始值设定项:
define [
'oauth2'
], (oauth2) ->
App =
Models: {}
Collections: {}
Views: {}
initialize: () ->
$.get "/javascripts/mu-config.json", (config) =>
@api_url = config.api
@site = config.site
@credentials = config.credentials
@make_oauth_call()
make_oauth_call: ->
@xhr = new oauth2.OAuth2XMLHttpRequest
authorizeEndpoint: "#{this.api_url}/callback"
tokenEndpoint: "#{this.api_url}/oauth/access_token"
clientID: this.credentials.clientID
clientSecret: this.credentials.clientSecret
localStoragePrefix: "oauth2.#{this.site.name}"
requestAuthorization: (callback) ->
console.log 'what?'
console.log callback
@xhr.onreadystatechange = () ->
console.log "do something"
@xhr.open "GET", "#{this.api_url}/notes?site=1&user=1"
@xhr.setRequestHeader 'Content-type', 'application/x-www-form-urlencoded'
@xhr.send "site=1&user=1"
那么什么在这里起作用呢?那么@xhr.open。。。实际上从服务器获取JSON,但仅此而已。我没有从客户端收到任何错误,但是console.log“what”没有启动,我不相信任何东西正在得到验证
服务器->oauth.coffee
token = null
credentials =
clientID: "sparkmasterflex"
clientSecret: "bob_the_builder"
site: 'http://marking_up.dev'
OAuth2 = require('simple-oauth2') credentials
authorization_uri = OAuth2.AuthCode.authorizeURL
redirect_uri: 'http://localhost:3000/callback'
scope: 'sites'
state: '55fce6241c8e6432e8dfee583141aa58'
res.redirect(authorization_uri)
OAuth2.AuthCode.getToken
code: "something here"
redirect_uri: "http://localhost:3000/callback"
, saveToken
saveToken = (error, result) ->
console.log('Access Token Error', error.message) if error
token = OAuth2.AccessToken.create(result)
module.exports = OAuth2
服务器->路由器
express = require("express")
db = require "../database"
oauth2 = require "../oauth"
router = express.Router()
# GET home page.
router.get "/", (req, res) ->
res.render 'index',
title: "Hello world"
# Initial page redirecting to Github
router.get '/auth', (req, res) ->
res.redirect authorization_uri
# Callback service parsing the authorization token and asking for the access token
# router.get '/callback', (req, res) ->
router.route('/callback')
.get (req, res) ->
code = req.query.code
console.log '/callback'
oauth2.AuthCode.getToken
code: code
redirect_uri: 'http://localhost:3000/callback'
, saveToken
saveToken = (error, result) ->
console.log('Access Token Error', error.message) if error
token = oauth2.AccessToken.create(result)
module.exports = router
运行节点服务器时,我收到以下错误:
/Users/raymondke99/Sites/marking_up_api/oauth.js:19
res.redirect(authorization_uri);
^
ReferenceError: res is not defined
at Object.<anonymous> (/Users/raymondke99/Sites/marking_up_api/oauth.js:19:1)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/Users/raymondke99/Sites/marking_up_api/routes/index.js:7:10)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
我有不止一个路由器,因为我使用的是expressjs,我不确定应该在哪里进行“全面”重定向。它需要进入每个路由器吗?为什么在誓言文件中有res.redirectauthorization\u uri?您的路由器中似乎已经有了GET端点?在删除该重定向方法后,我遇到了一个新错误。仍然不确定我在这里做什么…@Sparkmasterflex,我相信这与您如何定义saveToken回调有关。回顾一下,看看我的意思。尝试将您的saveToken移动到调用它的位置上方。我试图寻找一些coffeescript语法来定义不同的函数,但发现
/Users/raymondke99/Sites/marking_up_api/node_modules/simple-oauth2/lib/core.js:16
throw new Error('Callback not provided on API call');
^
Error: Callback not provided on API call
at Object.api (/Users/raymondke99/Sites/marking_up_api/node_modules/simple-oauth2/lib/core.js:16:13)
at Object.getToken (/Users/raymondke99/Sites/marking_up_api/node_modules/simple-oauth2/lib/client/auth-code.js:34:8)
at Object.<anonymous> (/Users/raymondke99/Sites/marking_up_api/oauth.js:19:17)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/Users/raymondke99/Sites/marking_up_api/routes/index.js:7:10)