I’ve been working on this simple Firebase Authentication tutorial using Express JS. However, I keep encountering the following error when I try to use POSTMAN to send an API post to register the username and password. There are no coding errors, just this authentication error.
Error creating user: FirebaseAuthError: Credential implementation provided to initializeApp() via the “credential” property has insufficient permission to access the requested resource. See https://firebase.google.com/docs/admin/setup for details on how to authenticate this SDK with appropriate permissions.
Here are the roles I have assigned to my IAM Principle in my project.
-
Create Service Accounts
-
Firebase Admin SDK Administrator Service Agent
-
Firebase Authentication Admin
-
Firestore Service Agent
-
Service Account Token Creator
const express = require("express");
const session = require("express-session");
const admin = require("firebase-admin");
const serviceAccount = require("./serviceAccountKey.json"); // Replace with your key
credential: admin.credential.cert(serviceAccount),
databaseURL: 'https://firebase-auth-express.firebaseio.com'
//const app = initializeApp();
const port = process.env.PORT || 3000;
secret: "super-secret-key",
// Middleware to check if the user is authenticated
const checkAuth = (req, res, next) => {
res.status(401).send("Unauthorized");
app.get("/", (req, res) => {
"Welcome to the Firebase Authentication and Post Management Example!"
app.post("/register", (req, res) => {
const { email, password } = req.body;
console.log("Successfully created user:", userRecord.uid);
res.send("User registered successfully");
console.error("Error creating user:", error);
res.status(500).send("User registration failed");
app.post("/login", (req, res) => {
const { email, password } = req.body;
// Check the provided password against the user's stored password hash
// This part may vary depending on your application
if (password === "admin123") {
req.session.user = userRecord.uid;
res.send("Login successful");
res.status(401).send("Login failed");
console.error("Error getting user:", error);
res.status(401).send("Login failed");
app.get("/logout", (req, res) => {
// Create a post (requires authentication)
app.post("/posts", checkAuth, (req, res) => {
const { title, content } = req.body;
// Add logic to save the post, e.g., in a database
res.send("Post created");
// Get all posts (requires authentication)
app.get("/posts", checkAuth, (req, res) => {
// Add logic to retrieve all posts, e.g., from a database
{ title: "Post 1", content: "Content of Post 1" },
{ title: "Post 2", content: "Content of Post 2" },
console.log(`Server is running on port ${port}`);
<code>
const express = require("express");
const session = require("express-session");
const admin = require("firebase-admin");
const serviceAccount = require("./serviceAccountKey.json"); // Replace with your key
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: 'https://firebase-auth-express.firebaseio.com'
});
const app = express();
//const app = initializeApp();
const port = process.env.PORT || 3000;
app.use(express.json());
app.use(
session({
secret: "super-secret-key",
resave: true,
saveUninitialized: true,
})
);
// Middleware to check if the user is authenticated
const checkAuth = (req, res, next) => {
if (req.session.user) {
next();
} else {
res.status(401).send("Unauthorized");
}
};
app.get("/", (req, res) => {
res.send(
"Welcome to the Firebase Authentication and Post Management Example!"
);
});
// Register new user
app.post("/register", (req, res) => {
const { email, password } = req.body;
admin
.auth()
.createUser({
email,
password,
})
.then((userRecord) => {
console.log("Successfully created user:", userRecord.uid);
res.send("User registered successfully");
})
.catch((error) => {
console.error("Error creating user:", error);
res.status(500).send("User registration failed");
});
});
// Log in a user
app.post("/login", (req, res) => {
const { email, password } = req.body;
admin
.auth()
.getUserByEmail(email)
.then((userRecord) => {
// Check the provided password against the user's stored password hash
// This part may vary depending on your application
if (password === "admin123") {
req.session.user = userRecord.uid;
res.send("Login successful");
} else {
res.status(401).send("Login failed");
}
})
.catch((error) => {
console.error("Error getting user:", error);
res.status(401).send("Login failed");
});
});
// Log out a user
app.get("/logout", (req, res) => {
req.session.user = null;
res.send("Logged out");
});
// Create a post (requires authentication)
app.post("/posts", checkAuth, (req, res) => {
const { title, content } = req.body;
// Add logic to save the post, e.g., in a database
res.send("Post created");
});
// Get all posts (requires authentication)
app.get("/posts", checkAuth, (req, res) => {
// Add logic to retrieve all posts, e.g., from a database
const posts = [
{ title: "Post 1", content: "Content of Post 1" },
{ title: "Post 2", content: "Content of Post 2" },
];
res.json(posts);
});
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
</code>
const express = require("express");
const session = require("express-session");
const admin = require("firebase-admin");
const serviceAccount = require("./serviceAccountKey.json"); // Replace with your key
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: 'https://firebase-auth-express.firebaseio.com'
});
const app = express();
//const app = initializeApp();
const port = process.env.PORT || 3000;
app.use(express.json());
app.use(
session({
secret: "super-secret-key",
resave: true,
saveUninitialized: true,
})
);
// Middleware to check if the user is authenticated
const checkAuth = (req, res, next) => {
if (req.session.user) {
next();
} else {
res.status(401).send("Unauthorized");
}
};
app.get("/", (req, res) => {
res.send(
"Welcome to the Firebase Authentication and Post Management Example!"
);
});
// Register new user
app.post("/register", (req, res) => {
const { email, password } = req.body;
admin
.auth()
.createUser({
email,
password,
})
.then((userRecord) => {
console.log("Successfully created user:", userRecord.uid);
res.send("User registered successfully");
})
.catch((error) => {
console.error("Error creating user:", error);
res.status(500).send("User registration failed");
});
});
// Log in a user
app.post("/login", (req, res) => {
const { email, password } = req.body;
admin
.auth()
.getUserByEmail(email)
.then((userRecord) => {
// Check the provided password against the user's stored password hash
// This part may vary depending on your application
if (password === "admin123") {
req.session.user = userRecord.uid;
res.send("Login successful");
} else {
res.status(401).send("Login failed");
}
})
.catch((error) => {
console.error("Error getting user:", error);
res.status(401).send("Login failed");
});
});
// Log out a user
app.get("/logout", (req, res) => {
req.session.user = null;
res.send("Logged out");
});
// Create a post (requires authentication)
app.post("/posts", checkAuth, (req, res) => {
const { title, content } = req.body;
// Add logic to save the post, e.g., in a database
res.send("Post created");
});
// Get all posts (requires authentication)
app.get("/posts", checkAuth, (req, res) => {
// Add logic to retrieve all posts, e.g., from a database
const posts = [
{ title: "Post 1", content: "Content of Post 1" },
{ title: "Post 2", content: "Content of Post 2" },
];
res.json(posts);
});
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
I was expecting to recieve a message from the console.log that the user has been successfully created. And a response from the server that User registered successfully.