npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

passport-local-near

v1.0.1

Published

A plugin to authenticate users through their NEAR wallets

Downloads

1

Readme

Passport-Local-Near

A plugin for passport that allows users to authenticate in your express app using their NEAR wallet.

How does it work?

passport-local-near asks the NEAR user to provide a signed message plus their public key, and checks that:

  1. The message can be decrypted using the public key, and therefore, it was signed with its private-key counterpart
  2. The public key effectively belongs to the user

Because of this, in order to use passport-local-near, you will need to include code both on your server and client side.

Installation

Install the passport-local-near package using npm

npm install passport-local-near

Setting up the Server side

To use passport-local-near you simply need to include it, and use its functions (authenticate, seralizeUser, and deserializeUser) in passport.

// import all the needed packages
const express = require('express');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const passport_local_near = require('passport-local-near')

// Initialize your app
var app = express();

// Setup passport
app.use(session({secret: 'keyboard cat', resave: false,
                 saveUninitialized: false}))
app.use(passport.initialize())
app.use(passport.session());

// Configure passport to use the passport_local_near functions
passport.use(new LocalStrategy(passport_local_near.authenticate))
passport.serializeUser(passport_local_near.serializeUser())
passport.deserializeUser(passport_local_near.deserializeUser())

// Set if your NEAR app (smartcontract) is in 'mainnet' or 'testnet'
passport_local_near.set_network('testnet')

Setting up the Client side

After the user authorized your smartcontract usint the NEAR wallet, this is, window.walletAccount.getAccountId() is setted, call the following function:

async function logged_in(){
  const accountId = window.walletAccount.getAccountId()
  const networkId = "testnet" // or "mainnet"
  
  // ask the user to sign a message with its private key
  const signed = await near.connection.signer.signMessage(
    accountId, accountId, networkId
  )

  // send the signed message to express to validate it
  fetch("/user/login",
        {method: "POST",
         headers: {'Content-Type': 'application/json'},
         body: JSON.stringify({username: accountId,
                               password: JSON.stringify(signed)})
        }).then(res => res.json())
          .then(res => callback(res))
}

function callback(response){                                                                                                                                                              
  if(response['success']){                                                                                                                                                                
    console.log('server-side login with NEAR succeded')                                                                                                                                     
  }else{                                                                                                                                                                                  
    console.log('server-side login with NEAR failed')                                                                                                                                                      
  }                                                                                                                                                                                       
}                                                                                                                                                                                         

where window.walletAccount is an instance of nearAPI.WalletConnection.

This function asks the user to sign a message, and sends the signed message + user's public key to the middleware /user/login.

Example

You can find a minimal example using local-passport-near here.