Overview
This module enables you to implement the authentication process using Salla within your Nodejs applications.
By plugging it into Passport, Salla authentication can be quickly and unobtrusively implemented into any application
or framework that supports connect-style middleware, including Express.js, by plugging it into Passport.
For more information about Salla's OAuth 2.0 implementation, check our
Web API Authorization Guide.
OAuth Workflow
Installation
$ npm install @salla.sa/passport-strategy
(back to top)
Usage
Configure Strategy
Salla authentication strategy authenticates users using a Salla Merchant Account
and OAuth 2.0 tokens. This strategy requires a verify
callback, which accepts
these credentials and calls done
providing a user as well as options
specifying a client ID, client secret, and callback URL.
const express = require("express");
const passport = require("passport");
const SallaAPIFactory = require("@salla.sa/passport-strategy");
const app = express();
const port = 8081;
const SallaAPI = new SallaAPIFactory({
clientID: "CLIENT_ID",
clientSecret: "CLIENT_SECRET",
callbackURL: "http://localhost:8081/oauth/callback",
});
passport.use(SallaAPI.getPassportStrategy());
SallaAPI.onAuth((accessToken, refreshToken, expires_in, user) => {
});
app.use((req, res, next) => SallaAPI.setExpressVerify(req, res, next));
app.get("/", function (req, res) {
res.send({ user: req.user });
});
app.get("/oauth/redirect", passport.authenticate("salla"));
app.get(
"/oauth/callback",
passport.authenticate("salla", { failureRedirect: "/login" }),
function (req, res) {
res.redirect("/");
}
);
app.listen(port, function () {
console.log("App is listening on port " + port);
});
(back to top)
Refreshing a Token
Refresh tokens can be received by calling SallaAPI.refreshToken() function, which returns a Promies.
const SallaAPI = require("@salla.sa/passport-strategy");
SallaAPI.requestNewAccessToken(SallaAPI.getRefreshToken())
.then(({ accessToken, newRefreshToken }) => {
})
.catch((err) => res.send(err));
Examples
For a complete, working example, refer to the login example, you can get your keys on Salla Partners > My Applications.
Getting All Orders from the store
app.get("/orders", ensureAuthenticated, async function (req, res) {
res.render("orders.html", {
orders: await SallaAPI.getAllOrders(),
});
});
Fetching Resources dynamic url
app.get("/customers", ensureAuthenticated, async function (req, res) {
res.render("orders.html", {
customers: await SallaAPI.fetchResource({
url: "https://api.salla.dev/admin/v2/customers",
}),
});
});
(back to top)
Tests
$ npm install --dev
$ npm test
(back to top)
Contributing
Contributions are what make the open-source community such an amazing place to learn, inspire, and create.
Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request.
You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
(back to top)
Security
If you discover any securitys-related issues, please email security@salla.sa instead of using the issue tracker.
Credits
License
The MIT License (MIT). Please see License File for more information.
(back to top)