Get User Info
You can fetch user information on the backend as well as on the frontend.
Fetching on the backend#
Using getUserByEmail#
- NodeJS
 - GoLang
 - Python
 
You can get a user's information on the backend using the getUsersByEmail and getUserById functions:
import ThirdPartyEmailPassword from "supertokens-node/recipe/thirdpartyemailpassword";
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 ThirdPartyEmailPassword.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/thirdpartyemailpassword")
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 := thirdpartyemailpassword.GetUsersByEmail("test@example.com")    if err != nil {        // TODO: Handle error        return    }    fmt.Println(usersInfo)    //...}- Asyncio
 - Syncio
 
from supertokens_python.recipe.thirdpartyemailpassword.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.thirdpartyemailpassword.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")Using getUserById#
- NodeJS
 - GoLang
 - Python
 
- Express
 - Hapi
 - Fastify
 - Koa
 - Loopback
 - AWS Lambda / Netlify
 - Next.js
 - NestJS
 
import express from "express";import ThirdPartyEmailPassword from "supertokens-node/recipe/thirdpartyemailpassword";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 ThirdPartyEmailPassword.getUserById(userId)    // ... })import ThirdPartyEmailPassword from "supertokens-node/recipe/thirdpartyemailpassword";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 ThirdPartyEmailPassword.getUserById(userId);        //...    }})import Fastify from "fastify";import ThirdPartyEmailPassword from "supertokens-node/recipe/thirdpartyemailpassword";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 ThirdPartyEmailPassword.getUserById(userId);    //....});import ThirdPartyEmailPassword from "supertokens-node/recipe/thirdpartyemailpassword";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 ThirdPartyEmailPassword.getUserById(userId);    //....};
exports.handler = verifySession(getUserInfo);import KoaRouter from "koa-router";import ThirdPartyEmailPassword from "supertokens-node/recipe/thirdpartyemailpassword";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 ThirdPartyEmailPassword.getUserById(userId);    //....});import { inject, intercept } from "@loopback/core";import { RestBindings, MiddlewareContext, get, response } from "@loopback/rest";import  ThirdPartyEmailPassword from "supertokens-node/recipe/thirdpartyemailpassword";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 ThirdPartyEmailPassword.getUserById(userId);        //....    }}import ThirdPartyEmailPassword from "supertokens-node/recipe/thirdpartyemailpassword";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 ThirdPartyEmailPassword.getUserById(userId);    //....}import { Controller, Post, UseGuards, Request, Response } from "@nestjs/common";import { AuthGuard } from './auth/auth.guard';import { Session } from './auth/session.decorator';import ThirdPartyEmailPassword from "supertokens-node/recipe/thirdpartyemailpassword";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 ThirdPartyEmailPassword.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/thirdpartyemailpassword")
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 := thirdpartyemailpassword.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/thirdpartyemailpassword")
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 := thirdpartyemailpassword.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/thirdpartyemailpassword")
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 := thirdpartyemailpassword.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/thirdpartyemailpassword")
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 := thirdpartyemailpassword.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.thirdpartyemailpassword.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.thirdpartyemailpassword.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.thirdpartyemailpassword.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 frontend#
important
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();      }}