【问题标题】:Cannot GET /callback while using salesforce oauth in nodejs在nodejs中使用salesforce oauth时无法获取/回调
【发布时间】:2014-03-05 07:47:59
【问题描述】:

我正在尝试使用 passportjs 对接错误在 nodejs 中执行 salseforce aouth。

Cannot GET /callback?code=aPrxaSyVmC8fBbcSNDQ8G8UtoR.YZip2hdfAGpMSc2hf0798gD_UoDle1dqqC0HnPyewycgKMw%3D%3D

这是我的代码

'use strict';
var express = require('express'),
  passport = require('passport'),
  util = require('util'),
  ForceDotComStrategy = require('passport-forcedotcom').Strategy;


//----------------------------------------------------------------------------
// REPLACE THE BELOW SETTING TO MATCH YOUR SALESFORCE CONNECTED-APP'S SETTINGS
//----------------------------------------------------------------------------
var CF_CLIENT_ID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
var CF_CLIENT_SECRET = 'xxxxxxxxxxxxxxxxxxxxx';
var CF_CALLBACK_URL = 'http://localhost:3000/callback';
var SF_AUTHORIZE_URL = 'https://login.salesforce.com/services/oauth2/authorize';
var SF_TOKEN_URL = 'https://login.salesforce.com/services/oauth2/token';

passport.serializeUser(function(user, done) {
  done(null, user);
});

passport.deserializeUser(function(obj, done) {
  done(null, obj);
});

var sfStrategy = new ForceDotComStrategy({
  clientID: CF_CLIENT_ID,
  clientSecret: CF_CLIENT_SECRET,
  callbackURL: CF_CALLBACK_URL,
  authorizationURL: SF_AUTHORIZE_URL,
  tokenURL: SF_TOKEN_URL
}, function(accessToken, refreshToken, profile, done) {
  process.nextTick(function() {
    delete profile._raw;
    return done(null, profile);
  });
});

passport.use(sfStrategy);


var app = express();

// configure Express
app.configure(function() {
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.logger());
  app.use(express.cookieParser());
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.session({
    secret: 'keyboard cat'
  }));
  // Initialize Passport!  Also use passport.session() middleware, to support
  // persistent login sessions (recommended).
  app.use(passport.initialize());
  app.use(passport.session());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});


app.get('/', function(req, res) {
  console.log(req.user);
  if(!req.user) {
    req.session.destroy();
    req.logout();
    return res.redirect('/login');
  }
  res.render('index', {
    user: req.user
  });
});


app.get('/login', function(req, res) {
  req.logout();
  req.session.destroy();

  res.render('login', {
    user: req.user
  });
});
app.get('/auth/forcedotcom', passport.authenticate('forcedotcom'), function(req, res) {
});
app.get('/auth/forcedotcom/callback', passport.authenticate('forcedotcom', {
  successRedirect: '/',
  failureRedirect: '/login'
}), function(req, res) {
  res.redirect('/');
});

app.get('/logout', function(req, res) {
  res.redirect('/login');
});

app.listen(3000);
console.log('localhost run in 3000');

function ensureAuthenticated(req, res, next) {
  if(req.isAuthenticated()) {
    return next();
  }
  res.redirect('/login');
}

我正在尝试解决已经在那里发布查询但无法解决的问题Cannot GET /auth/twitter/callback while using twitter oauth in nodejs

【问题讨论】:

  • 我个人在这种情况下使用Grant,到目前为止它运行良好。它还支持使用 SalesForce 进行身份验证。

标签: node.js


【解决方案1】:

您似乎已在 Salesforce oauth 应用中将回调 URL 设置为 http://yourdomain.com/callback,但尚未正确定义处理程序

要么将 Salesforce oauth 应用的回调 URL 更改为

http://yourdomain.com/auth/forcedotcom/callback

或在您的代码中更改以下内容

app.get('/auth/forcedotcom/callback', passport.authenticate('...

app.get('/callback', passport.authenticate('forcedotcom', {
  successRedirect: '/',
  failureRedirect: '/login'
}), function(req, res) {
  res.redirect('/');
});

【讨论】:

    猜你喜欢
    • 2013-10-23
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 2012-06-22
    • 2014-03-23
    • 1970-01-01
    相关资源
    最近更新 更多