使用node、passport和react进行Github身份验证失败
Github authentication with node, passport and react fails
我正试图将一个简单的express应用程序移到react上,但github身份验证在简单的expressapp上运行良好(不是同构的),但由于react而变得复杂。
有一个按钮可以点击github身份验证。
如果我点击按钮
<a href="/auth/github">
则验证成功
但是如果我使用onclick函数和xhr.get,那么就会失败
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:3000' is therefore not allowed access.
登录.jsx
export default class Login extends React.Component {
handleClick (event) {
event.preventDefault()
let xhr = new XMLHttpRequest();
xhr.open('get', '/auth/github');
xhr.send();
}
render () {
return (
<div className="login">
<button className="btn" id="login-btn" onClick={this.handleClick.bind(this)}>
<img src="/public/img/github_32px.png" alt="github logo" />
<p>LOGIN WITH GUTHUB</p>
</button>
</div>
)
}
}
这失败了!!控制允许原点误差。
而
export default class Login extends React.Component {
render () {
return (
<div>
<a href="/auth/github">
<div className="btn" id="login-btn">
<img src="/public/img/github_32px.png" alt="github logo" />
<p>LOGIN WITH GITHUB</p>
</div>
</a>
</div>
)
}
成功了!
server.js
var express = require('express');
var mongoose = require('mongoose');
var passport = require('passport');
var session = require('express-session');
var routes = require('./app/routes');
var app = express();
require('dotenv').load();
require('./app/config/passport')(passport);
mongoose.connect(process.env.MONGO_URI);
app.use('/controllers', express.static(process.cwd() + '/app/controllers'));
app.use('/public', express.static(process.cwd() + '/public'));
app.use(session({
secret: process.env.SECRET,
resave: false,
saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());
routes(app, passport);
var port = process.env.PORT || 8080;
app.listen(port, function () {
console.log('Node.js listening on port ' + port + '...');
});
app/routes.js
module.exports = function (app, passport) {
app.route('/')
.get(function (req, res) {
res.sendFile(process.cwd() + '/public/index.html')
})
app.route('/auth/github')
.get(passport.authenticate('github'));
app.route('/auth/github/callback')
.get(passport.authenticate('github', {
successRedirect: '/',
failureRedirect: '/login'
}));
}
我如何使用xhr来完成这项工作?或者更确切地说,为什么它不起作用?
如果可能的话,我更喜欢使用xhr,因为我希望一旦成功,我可以订购重定向和其他东西,这是我的第二个问题。。。但在任何情况下,我肯定都可以这样做
检查此cors-npm包并将其安装到服务器:https://www.npmjs.com/package/corsnpm install cors
然后,在主server.js
中app.use(cors())
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 使用agility.js进行页面布局和合成
- 如何使用skip参数使用angular ui引导进行服务器端分页
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 借助asp.net验证或java脚本对多个文本进行验证
- 使用promise和mongoose对文档进行排序
- Selectize.js:如何对整数值的选项进行排序
- 在Safari执行javascript之前对其进行修改
- React组件等待所需道具进行渲染
- 单击顶部导航时如何进行向下滚动效果(向下滑动).
- 使用html中的外部javascript进行数据验证
- 如何在javascript上使用flak-babel进行翻译
- 如何通过引用var Using DataTables来进行分页或排序
- $rootScope未使用forEach进行更新
- 有没有一个javascript图形绘制库可以进行气球树布局
- 在数据提取完成之前进行页面渲染
- JQuery对动态创建的对象进行选择
- 通过 Github 进行身份验证(使用 everyauth)
- 正在从github导入模块以进行本机反应
- 使用node、passport和react进行Github身份验证失败