尝试使用 Firebase 通过 Steam OpenID 设置登录
Trying to set up a sign in through steam OpenID with Firebase
我目前正在从事一个涉及通过 Steam 登录的项目,我想涉及到 Firebase。我发现这个指南 (https://codepen.io/johnchristopherjones/post/setting-up-openid) 看起来很棒并且展示了这样做的方法,但看起来这个人设置 firebase 的方式现在已经过时了。我是这方面的新手,但我目前正在更新代码,但我遇到了错误,需要下一步该怎么做的指导,或者我走在正确的道路上?
Server.js
var express = require("express");
var app = express();
var session = require("express-session");
var firebase = require("firebase")(session);
var FirebaseStoreOptions = {
host: "",
token: "",
reapInterval: 600000
};
app.use(
(config = {
apiKey: apiKey,
authDomain: "firebaseapp.com",
databaseURL: "",
projectId: "",
})
);
firebase.initializeApp(config);
var openIdStrategy = require("password-openid").Strategy;
var SteamStrategy = new OpenIDStrategy(
{
// OpenID provider configuration
providerURL: "http://steamcommunity.com/openid",
stateless: true,
// How the OpenID provider should return the client to us
returnURL: "http://localhost:4000/auth/openid/return",
realm: "http://localhost:4000/"
},
function(identifier, done) {
process.nextTick(function() {
var user = {
identifier: identifier,
steamId: identifier.match(/\d+$/)[0]
};
return done(null, user);
});
}
);
var passport = require("passport");
passport.use(SteamStrategy);
passport.serializeUser(function(user, done) {
done(null, user.identifier);
});
passport.deserializeUser(function(identifier, done) {
// For this demo, we'll just return an object literal since our user
// objects are this trivial. In the real world, you'd probably fetch
// your user object from your database here.
done(null, {
identifier: identifier,
steamId: identifier.match(/\d+$/)[0]
});
});
app.use(passport.initialize());
app.use(passport.session());
app.post("/auth/openid", passport.authenticate("openid"));
app.get("/auth/openid/return", passport.authenticate("openid"), function(
request,
response
) {
if (request.user) {
response.redirect("/?steamid=" + request.user.steamId);
} else {
response.redirect("/?failed");
}
});
app.post("/auth/logout", function(request, response) {
request.logout();
// After logging out, redirect the user somewhere useful.
// Where they came from or the site root are good choices.
response.redirect(request.get("Referer") || "/");
});
app.get("/", function(request, response) {
response.write("<!DOCTYPE html>");
if (request.user) {
response.write(
(request.session.passport && JSON.stringify(request.user)) || "None"
);
response.write('<form action="/auth/logout" method="post">');
response.write('<input type="submit" value="Log Out"/></form>');
} else {
if (request.query.steamid) {
response.write("Not logged in.");
}
response.write('<form action="/auth/openid" method="post">');
response.write(
'<input name="submit" type="image" src="http://steamcommunity-a.' +
'akamaihd.net/public/images/signinthroughsteam/sits_small.png" ' +
'alt="Sign in through Steam"/></form>'
);
}
response.send();
});
var port = 4000;
var server = app.listen(port);
console.log("Listening on port " + port);
出于显而易见的原因,我在上面的代码中唯一删除的是我的 Firebase 信息。我目前的错误是 app.use() requires a middleware function
。感谢您的帮助:)
您需要 2 个文件和这些依赖项才能使其正常工作。
server.js
const express = require('express');
const session = require('express-session');
const FirebaseStore = require('connect-session-firebase')(session);
const firebase = require('firebase-admin');
const ref = firebase.initializeApp({
credential: firebase.credential.cert('steam.json'),
databaseURL: '**your firebase database name**.firebaseio.com'
});
var app = express();
app.use(session({
store: new FirebaseStore({
database: ref.database()
}),
secret: 'keyboard cat',
resave: true,
saveUninitialized: true
}));
var OpenIDStrategy = require('passport-openid').Strategy;
var SteamStrategy = new OpenIDStrategy({
// OpenID provider configuration
providerURL: 'http://steamcommunity.com/openid',
stateless: true,
// How the OpenID provider should return the client to us
returnURL: 'http://localhost:4000/auth/openid/return',
realm: 'http://localhost:4000/',
},
function(identifier, done) {
process.nextTick(function () {
var user = {
identifier: identifier,
steamId: identifier.match(/\d+$/)[0]
};
return done(null, user);
});
});
var passport = require('passport');
passport.use(SteamStrategy);
passport.serializeUser(function(user, done) {
done(null, user.identifier);
});
passport.deserializeUser(function(identifier, done) {
done(null, {
identifier: identifier,
steamId: identifier.match(/\d+$/)[0]
});
});
app.use(passport.initialize());
app.use(passport.session());
app.post('/auth/openid', passport.authenticate('openid'));
app.get('/auth/openid/return', passport.authenticate('openid'),
function(request, response) {
if (request.user) {
response.redirect('/?steamid=' + request.user.steamId);
} else {
response.redirect('/?failed');
}
});
app.post('/auth/logout', function(request, response) {
request.logout();
response.redirect(request.get('Referer') || '/')
});
app.get('/', function(request, response) {
response.write('<!DOCTYPE html>')
if (request.user) {
response.write(request.session.passport &&
JSON.stringify(request.user) || 'None');
response.write('<form action="/auth/logout" method="post">');
response.write('<input type="submit" value="Log Out"/></form>');
} else {
if (request.query.steamid) {
response.write('Not logged in.');
}
response.write('<form action="/auth/openid" method="post">');
response.write(
'<input name="submit" type="image" src="http://steamcommunity-a.' +
'akamaihd.net/public/images/signinthroughsteam/sits_small.png" ' +
'alt="Sign in through Steam"/></form>');
}
response.send();
});
var port = 4000;
var server = app.listen(port);
console.log('Listening on port ' + port);
steam.json
在此处复制您的 firebase 服务帐户凭据
例如像这样
{
"type": "service_account",
"project_id": "",
"private_key_id": "",
"private_key": "-----BEGIN PRIVATE KEY-----\n-----END PRIVATE KEY-----\n",
"client_email": "",
"client_id": "",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "",
"client_x509_cert_url": ""
}
依赖关系
"dependencies": {
"connect-session-firebase": "^4.0.1",
"express": "^4.14.0",
"express-session": "^1.14.2",
"firebase-admin": "^4.0.4",
"passport": "^0.3.2",
"passport-openid": "^0.4.0"
},
我目前正在从事一个涉及通过 Steam 登录的项目,我想涉及到 Firebase。我发现这个指南 (https://codepen.io/johnchristopherjones/post/setting-up-openid) 看起来很棒并且展示了这样做的方法,但看起来这个人设置 firebase 的方式现在已经过时了。我是这方面的新手,但我目前正在更新代码,但我遇到了错误,需要下一步该怎么做的指导,或者我走在正确的道路上?
Server.js
var express = require("express");
var app = express();
var session = require("express-session");
var firebase = require("firebase")(session);
var FirebaseStoreOptions = {
host: "",
token: "",
reapInterval: 600000
};
app.use(
(config = {
apiKey: apiKey,
authDomain: "firebaseapp.com",
databaseURL: "",
projectId: "",
})
);
firebase.initializeApp(config);
var openIdStrategy = require("password-openid").Strategy;
var SteamStrategy = new OpenIDStrategy(
{
// OpenID provider configuration
providerURL: "http://steamcommunity.com/openid",
stateless: true,
// How the OpenID provider should return the client to us
returnURL: "http://localhost:4000/auth/openid/return",
realm: "http://localhost:4000/"
},
function(identifier, done) {
process.nextTick(function() {
var user = {
identifier: identifier,
steamId: identifier.match(/\d+$/)[0]
};
return done(null, user);
});
}
);
var passport = require("passport");
passport.use(SteamStrategy);
passport.serializeUser(function(user, done) {
done(null, user.identifier);
});
passport.deserializeUser(function(identifier, done) {
// For this demo, we'll just return an object literal since our user
// objects are this trivial. In the real world, you'd probably fetch
// your user object from your database here.
done(null, {
identifier: identifier,
steamId: identifier.match(/\d+$/)[0]
});
});
app.use(passport.initialize());
app.use(passport.session());
app.post("/auth/openid", passport.authenticate("openid"));
app.get("/auth/openid/return", passport.authenticate("openid"), function(
request,
response
) {
if (request.user) {
response.redirect("/?steamid=" + request.user.steamId);
} else {
response.redirect("/?failed");
}
});
app.post("/auth/logout", function(request, response) {
request.logout();
// After logging out, redirect the user somewhere useful.
// Where they came from or the site root are good choices.
response.redirect(request.get("Referer") || "/");
});
app.get("/", function(request, response) {
response.write("<!DOCTYPE html>");
if (request.user) {
response.write(
(request.session.passport && JSON.stringify(request.user)) || "None"
);
response.write('<form action="/auth/logout" method="post">');
response.write('<input type="submit" value="Log Out"/></form>');
} else {
if (request.query.steamid) {
response.write("Not logged in.");
}
response.write('<form action="/auth/openid" method="post">');
response.write(
'<input name="submit" type="image" src="http://steamcommunity-a.' +
'akamaihd.net/public/images/signinthroughsteam/sits_small.png" ' +
'alt="Sign in through Steam"/></form>'
);
}
response.send();
});
var port = 4000;
var server = app.listen(port);
console.log("Listening on port " + port);
出于显而易见的原因,我在上面的代码中唯一删除的是我的 Firebase 信息。我目前的错误是 app.use() requires a middleware function
。感谢您的帮助:)
您需要 2 个文件和这些依赖项才能使其正常工作。
server.js
const express = require('express');
const session = require('express-session');
const FirebaseStore = require('connect-session-firebase')(session);
const firebase = require('firebase-admin');
const ref = firebase.initializeApp({
credential: firebase.credential.cert('steam.json'),
databaseURL: '**your firebase database name**.firebaseio.com'
});
var app = express();
app.use(session({
store: new FirebaseStore({
database: ref.database()
}),
secret: 'keyboard cat',
resave: true,
saveUninitialized: true
}));
var OpenIDStrategy = require('passport-openid').Strategy;
var SteamStrategy = new OpenIDStrategy({
// OpenID provider configuration
providerURL: 'http://steamcommunity.com/openid',
stateless: true,
// How the OpenID provider should return the client to us
returnURL: 'http://localhost:4000/auth/openid/return',
realm: 'http://localhost:4000/',
},
function(identifier, done) {
process.nextTick(function () {
var user = {
identifier: identifier,
steamId: identifier.match(/\d+$/)[0]
};
return done(null, user);
});
});
var passport = require('passport');
passport.use(SteamStrategy);
passport.serializeUser(function(user, done) {
done(null, user.identifier);
});
passport.deserializeUser(function(identifier, done) {
done(null, {
identifier: identifier,
steamId: identifier.match(/\d+$/)[0]
});
});
app.use(passport.initialize());
app.use(passport.session());
app.post('/auth/openid', passport.authenticate('openid'));
app.get('/auth/openid/return', passport.authenticate('openid'),
function(request, response) {
if (request.user) {
response.redirect('/?steamid=' + request.user.steamId);
} else {
response.redirect('/?failed');
}
});
app.post('/auth/logout', function(request, response) {
request.logout();
response.redirect(request.get('Referer') || '/')
});
app.get('/', function(request, response) {
response.write('<!DOCTYPE html>')
if (request.user) {
response.write(request.session.passport &&
JSON.stringify(request.user) || 'None');
response.write('<form action="/auth/logout" method="post">');
response.write('<input type="submit" value="Log Out"/></form>');
} else {
if (request.query.steamid) {
response.write('Not logged in.');
}
response.write('<form action="/auth/openid" method="post">');
response.write(
'<input name="submit" type="image" src="http://steamcommunity-a.' +
'akamaihd.net/public/images/signinthroughsteam/sits_small.png" ' +
'alt="Sign in through Steam"/></form>');
}
response.send();
});
var port = 4000;
var server = app.listen(port);
console.log('Listening on port ' + port);
steam.json 在此处复制您的 firebase 服务帐户凭据 例如像这样
{
"type": "service_account",
"project_id": "",
"private_key_id": "",
"private_key": "-----BEGIN PRIVATE KEY-----\n-----END PRIVATE KEY-----\n",
"client_email": "",
"client_id": "",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "",
"client_x509_cert_url": ""
}
依赖关系
"dependencies": {
"connect-session-firebase": "^4.0.1",
"express": "^4.14.0",
"express-session": "^1.14.2",
"firebase-admin": "^4.0.4",
"passport": "^0.3.2",
"passport-openid": "^0.4.0"
},