Get User Info
You can fetch user information on the backend as well as on the frontend.
#
Fetching on the backendgetUserByEmail
#
Using - NodeJS
- GoLang
- Python
You can get a user's information on the backend using the getUsersByEmail
and getUserById
functions:
import ThirdParty from "supertokens-node/recipe/thirdparty";
async function getUserInfo() { // Note that usersInfo has type User[] // You can learn more about the `User` object over here https://github.com/supertokens/core-driver-interface/wiki let usersInfo = await ThirdParty.getUsersByEmail("test@example.com");}
You can get a user's information on the backend using the GetUsersByEmail
and GetUserById
functions:
import ( "fmt"
"github.com/supertokens/supertokens-golang/recipe/thirdparty")
func main() {
// Note that usersInfo has type User[] // You can learn more about the `User` object over here https://github.com/supertokens/core-driver-interface/wiki usersInfo, err := thirdparty.GetUsersByEmail("test@example.com") if err != nil { // TODO: Handle error return } fmt.Println(usersInfo) //...}
- Asyncio
- Syncio
from supertokens_python.recipe.thirdparty.asyncio import get_users_by_email
async def some_func(): # Note that users_info has type List[User] _ = await get_users_by_email("test@example.com")
from supertokens_python.recipe.thirdparty.syncio import get_users_by_email
# Note that users_info has type List[User]# You can learn more about the `User` object over here https://github.com/supertokens/core-driver-interface/wiki users_info = get_users_by_email("test@example.com")
getUserById
#
Using - NodeJS
- GoLang
- Python
- Express
- Hapi
- Fastify
- Koa
- Loopback
- AWS Lambda / Netlify
- Next.js
- NestJS
import express from "express";import ThirdParty from "supertokens-node/recipe/thirdparty";import { verifySession } from "supertokens-node/recipe/session/framework/express";import { SessionRequest } from 'supertokens-node/framework/express';
let app = express();app.get("/get-user-info", verifySession(), async (req: SessionRequest, res) => { let userId = req.session!.getUserId(); // You can learn more about the `User` object over here https://github.com/supertokens/core-driver-interface/wiki let userInfo = await ThirdParty.getUserById(userId) // ... })
import ThirdParty from "supertokens-node/recipe/thirdparty";import { verifySession } from "supertokens-node/recipe/session/framework/hapi";import Hapi from "@hapi/hapi";import { SessionRequest } from "supertokens-node/framework/hapi";
let server = Hapi.server({ port: 8000 });
server.route({ path: "/get-user-info", method: "get", options: { pre: [ { method: verifySession() }, ], }, handler: async (req: SessionRequest, res) => { let userId = req.session!.getUserId(); // You can learn more about the `User` object over here https://github.com/supertokens/core-driver-interface/wiki let userInfo = await ThirdParty.getUserById(userId); //... }})
import Fastify from "fastify";import ThirdParty from "supertokens-node/recipe/thirdparty";import { verifySession } from "supertokens-node/recipe/session/framework/fastify";import { SessionRequest } from 'supertokens-node/framework/fastify';
const fastify = Fastify();
fastify.post("/like-comment", { preHandler: verifySession(),}, async (req: SessionRequest, res) => { let userId = req.session!.getUserId(); // You can learn more about the `User` object over here https://github.com/supertokens/core-driver-interface/wiki let userInfo = await ThirdParty.getUserById(userId); //....});
import ThirdParty from "supertokens-node/recipe/thirdparty";import { verifySession } from "supertokens-node/recipe/session/framework/awsLambda";import { SessionEvent } from "supertokens-node/framework/awsLambda";
async function getUserInfo(awsEvent: SessionEvent) { let userId = awsEvent.session!.getUserId(); // You can learn more about the `User` object over here https://github.com/supertokens/core-driver-interface/wiki let userInfo = await ThirdParty.getUserById(userId); //....};
exports.handler = verifySession(getUserInfo);
import KoaRouter from "koa-router";import ThirdParty from "supertokens-node/recipe/thirdparty";import { verifySession } from "supertokens-node/recipe/session/framework/koa";import { SessionContext } from "supertokens-node/framework/koa";
let router = new KoaRouter();
router.get("/get-user-info", verifySession(), async (ctx: SessionContext, next) => { let userId = ctx.session!.getUserId(); // You can learn more about the `User` object over here https://github.com/supertokens/core-driver-interface/wiki let userInfo = await ThirdParty.getUserById(userId); //....});
import { inject, intercept } from "@loopback/core";import { RestBindings, MiddlewareContext, get, response } from "@loopback/rest";import ThirdParty from "supertokens-node/recipe/thirdparty";import { verifySession } from "supertokens-node/recipe/session/framework/loopback";import Session from "supertokens-node/recipe/session";import { SessionContext } from "supertokens-node/framework/loopback";
class GetUserInfo { constructor(@inject(RestBindings.Http.CONTEXT) private ctx: MiddlewareContext) {} @get("/get-user-info") @intercept(verifySession()) @response(200) async handler() { let userId = ((this.ctx as any).session as Session.SessionContainer).getUserId(); // You can learn more about the `User` object over here https://github.com/supertokens/core-driver-interface/wiki let userInfo = await ThirdParty.getUserById(userId); //.... }}
import ThirdParty from "supertokens-node/recipe/thirdparty";import { superTokensNextWrapper } from 'supertokens-node/nextjs'import { verifySession } from "supertokens-node/recipe/session/framework/express";import { SessionRequest } from "supertokens-node/framework/express";
export default async function likeComment(req: SessionRequest, res: any) { await superTokensNextWrapper( async (next) => { await verifySession()(req, res, next); }, req, res )
let userId = req.session!.getUserId(); // You can learn more about the `User` object over here https://github.com/supertokens/core-driver-interface/wiki let userInfo = await ThirdParty.getUserById(userId); //....}
import { Controller, Post, UseGuards, Request, Response } from "@nestjs/common";import { AuthGuard } from './auth/auth.guard';import { Session } from './auth/session.decorator';import ThirdParty from "supertokens-node/recipe/thirdparty";import { SessionRequest } from "supertokens-node/framework/express";
@Controller()export class ExampleController { @Post('example') @UseGuards(new AuthGuard()) // For more information about this guard please read our NestJS guide. async postExample(@Request() req: SessionRequest, @Session() session: Session, @Response({passthrough: true}) res: Response): Promise<boolean> { let userId = session.getUserId(); // You can learn more about the `User` object over here https://github.com/supertokens/core-driver-interface/wiki let userInfo = await ThirdParty.getUserById(userId); //.... return true; }}
- Chi
- net/http
- Gin
- Mux
import ( "fmt" "net/http"
"github.com/supertokens/supertokens-golang/recipe/session" "github.com/supertokens/supertokens-golang/recipe/thirdparty")
func main() { _ = http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { session.VerifySession(nil, getUserInfoAPI).ServeHTTP(rw, r) })}
func getUserInfoAPI(w http.ResponseWriter, r *http.Request) { sessionContainer := session.GetSessionFromRequestContext(r.Context())
userID := sessionContainer.GetUserID() // You can learn more about the `User` object over here https://github.com/supertokens/core-driver-interface/wiki userInfo, err := thirdparty.GetUserByID(userID) if err != nil { // TODO: Handle error return } fmt.Println(userInfo)}
import ( "fmt" "net/http"
"github.com/gin-gonic/gin" "github.com/supertokens/supertokens-golang/recipe/session" "github.com/supertokens/supertokens-golang/recipe/session/sessmodels" "github.com/supertokens/supertokens-golang/recipe/thirdparty")
func main() { router := gin.New() router.GET("/getuserinfo", verifySession(nil), getUserInfoAPI)}
func verifySession(options *sessmodels.VerifySessionOptions) gin.HandlerFunc { return func(c *gin.Context) { session.VerifySession(options, func(rw http.ResponseWriter, r *http.Request) { c.Request = c.Request.WithContext(r.Context()) c.Next() })(c.Writer, c.Request) // we call Abort so that the next handler in the chain is not called, unless we call Next explicitly c.Abort() }}
func getUserInfoAPI(c *gin.Context) { sessionContainer := session.GetSessionFromRequestContext(c.Request.Context())
userID := sessionContainer.GetUserID()
// You can learn more about the `User` object over here https://github.com/supertokens/core-driver-interface/wiki userInfo, err := thirdparty.GetUserByID(userID) if err != nil { // TODO: Handle error return } fmt.Println(userInfo) //...}
import ( "fmt" "net/http"
"github.com/go-chi/chi" "github.com/supertokens/supertokens-golang/recipe/session" "github.com/supertokens/supertokens-golang/recipe/thirdparty")
func main() { r := chi.NewRouter() r.Get("/getuserinfo", session.VerifySession(nil, getUserInfoAPI))}
func getUserInfoAPI(w http.ResponseWriter, r *http.Request) { sessionContainer := session.GetSessionFromRequestContext(r.Context())
userID := sessionContainer.GetUserID() // You can learn more about the `User` object over here https://github.com/supertokens/core-driver-interface/wiki userInfo, err := thirdparty.GetUserByID(userID) if err != nil { // TODO: Handle error return } fmt.Println(userInfo)}
import ( "fmt" "net/http"
"github.com/gorilla/mux" "github.com/supertokens/supertokens-golang/recipe/session" "github.com/supertokens/supertokens-golang/recipe/thirdparty")
func main() { router := mux.NewRouter() router.HandleFunc("/getuserinfo", session.VerifySession(nil, getUserInfoAPI)).Methods(http.MethodGet)}
func getUserInfoAPI(w http.ResponseWriter, r *http.Request) { sessionContainer := session.GetSessionFromRequestContext(r.Context())
userID := sessionContainer.GetUserID() // You can learn more about the `User` object over here https://github.com/supertokens/core-driver-interface/wiki userInfo, err := thirdparty.GetUserByID(userID) if err != nil { // TODO: Handle error return } fmt.Println(userInfo)}
- FastAPI
- Flask
- Django
from supertokens_python.recipe.session.framework.fastapi import verify_sessionfrom supertokens_python.recipe.thirdparty.asyncio import get_user_by_idfrom supertokens_python.recipe.session import SessionContainerfrom fastapi import FastAPI, Depends
app = FastAPI()
@app.post('/get_user_info_api') async def get_user_info_api(session: SessionContainer = Depends(verify_session())): user_id = session.get_user_id()
# You can learn more about the `User` object over here https://github.com/supertokens/core-driver-interface/wiki _ = await get_user_by_id(user_id)
from supertokens_python.recipe.session.framework.flask import verify_sessionfrom supertokens_python.recipe.thirdparty.syncio import get_user_by_idfrom flask import Flask, gfrom supertokens_python.recipe.session import SessionContainer
app = Flask(__name__)
@app.route('/update-jwt', methods=['POST']) @verify_session()def get_user_info_api(): session: SessionContainer = g.supertokens
user_id = session.get_user_id()
# You can learn more about the `User` object over here https://github.com/supertokens/core-driver-interface/wiki _ = get_user_by_id(user_id)
from supertokens_python.recipe.session.framework.django.asyncio import verify_sessionfrom supertokens_python.recipe.thirdparty.asyncio import get_user_by_idfrom django.http import HttpRequestfrom supertokens_python.recipe.session import SessionContainer
@verify_session()async def get_user_info_api(request: HttpRequest): session: SessionContainer = request.supertokens
user_id = session.get_user_id()
# You can learn more about the `User` object over here https://github.com/supertokens/core-driver-interface/wiki _ = await get_user_by_id(user_id)
#
Fetching on the frontendimportant
The function calls below require no API calls and read directly from the session information stored on the frontend. This makes them very quick.
- ReactJS
- Angular
- Vue
- Plain JavaScript
- React Native
- With React Context
- Without React Context
import React from "react";import { useSessionContext } from 'supertokens-auth-react/recipe/session';
// Your dashboard componentfunction Dashboard(props: any) { let session = useSessionContext();
if (session.loading) { return null; }
let {doesSessionExist, userId, accessTokenPayload} = session;
// doesSessionExist will always be true if this is wrapped in `<SessionAuth>` if (!doesSessionExist) { // TODO }
let name = accessTokenPayload.userName;}
import Session from 'supertokens-auth-react/recipe/session';
async function getUserInfo() { if (await Session.doesSessionExist()) { let userId = await Session.getUserId(); let accessTokenPayload = await Session.getAccessTokenPayloadSecurely(); }}
- Via NPM
- Via Script Tag
import Session from 'supertokens-web-js/recipe/session';
async function getUserInfo() { if (await Session.doesSessionExist()) { let userId = await Session.getUserId(); let accessTokenPayload = await Session.getAccessTokenPayloadSecurely(); }}
async function getUserInfo() { if (await supertokensSession.doesSessionExist()) { let userId = await supertokensSession.getUserId(); let accessTokenPayload = await supertokensSession.getAccessTokenPayloadSecurely(); }}
import SuperTokens from 'supertokens-react-native';
async function getUserInfo() { if (await SuperTokens.doesSessionExist()) { let userId = await SuperTokens.getUserId(); let accessTokenPayload = await SuperTokens.getAccessTokenPayloadSecurely(); }}
import Session from 'supertokens-web-js/recipe/session';
async function getUserInfo() { if (await Session.doesSessionExist()) { let userId = await Session.getUserId(); let accessTokenPayload = await Session.getAccessTokenPayloadSecurely(); }}
import Session from 'supertokens-web-js/recipe/session';
async function getUserInfo() { if (await Session.doesSessionExist()) { let userId = await Session.getUserId(); let accessTokenPayload = await Session.getAccessTokenPayloadSecurely(); }}