-
Notifications
You must be signed in to change notification settings - Fork 386
/
get-session.ts
127 lines (125 loc) · 3.47 KB
/
get-session.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import { IncomingMessage, ServerResponse } from 'http';
import { NextApiRequest, NextApiResponse } from 'next';
import { NextRequest, NextResponse } from 'next/server';
import { SessionCache, Session, get } from '../session';
/**
* Get the user's session from the server.
*
* **In the App Router:**
*
* In a route handler:
*
* ```js
* // app/my-api/route.js
* import { getSession } from '@auth0/nextjs-auth0';
*
* export async function GET() {
* const { user } = await getSession();
* return NextResponse.json({ foo: 'bar' });
* }
*
* // Or, it's slightly more efficient to use the `req`, `res` args if you're
* // using another part of the SDK like `withApiAuthRequired` or `getAccessToken`.
* import { getSession, withApiAuthRequired } from '@auth0/nextjs-auth0';
*
* const GET = withApiAuthRequired(async function GET(req) {
* const res = new NextResponse();
* const { user } = await getSession(req, res);
* return NextResponse.json({ foo: 'bar' }, res);
* });
*
* export { GET };
* ```
*
* In a page or React Server Component:
*
* ```js
* // app/my-page/page.js
* import { getSession } from '@auth0/nextjs-auth0';
*
* export default async function MyPage({ params, searchParams }) {
* const { user } = await getSession();
* return <h1>My Page</h1>;
* }
* ```
*
* **Note:** You can't write to the cookie in a React Server Component, so updates
* to the session like setting the expiry of the rolling session won't be persisted.
* For this, we recommend interacting with the session in the middleware.
*
* You can also get the session in a page or route in the Edge Runtime:
*
* ```js
* // app/my-api/route.js
* import { getSession } from '@auth0/nextjs-auth0/edge'; // Note the /edge import
*
* export default async function MyPage({ params, searchParams }) {
* const { user } = await getSession();
* return <h1>My Page</h1>;
* }
*
* export const runtime = 'edge';
* ```
*
* **Note:** The Edge runtime features are only supported in the App Router.
*
* **In the Page Router:**
*
* In an API handler:
*
* ```js
* // pages/api/my-api.js
* import { getSession } from '@auth0/nextjs-auth0';
*
* export default async function MyApi(req, res) {
* const { user } = await getSession(req, res);
* res.status(200).json({ name: user.name });
* }
* ```
*
* In a page:
*
* ```js
* // pages/my-page.js
* import { getSession } from '@auth0/nextjs-auth0';
*
* export default function About() {
* return <div>About</div>;
* }
*
* export async function getServerSideProps(ctx) {
* const { user } = await getSession(ctx.req, ctx.res);
* return { props: { foo: 'bar' } };
* }
* ```
*
* **In middleware:**
*
* ```js
* import { NextResponse } from 'next/server';
* import { getSession } from '@auth0/nextjs-auth0/edge'; // Note the /edge import
*
* export async function middleware(req) {
* const res = new NextResponse();
* const { user } = await getSession(req, res);
* return NextResponse.redirect(new URL('/bar', request.url), res);
* }
*
* export const config = {
* matcher: '/foo',
* };
*
* @category Server
*/
export type GetSession = (
...args: [IncomingMessage, ServerResponse] | [NextApiRequest, NextApiResponse] | [NextRequest, NextResponse] | []
) => Promise<Session | null | undefined>;
/**
* @ignore
*/
export default function sessionFactory(sessionCache: SessionCache): GetSession {
return async (req?, res?) => {
const [session] = await get({ req, res, sessionCache });
return session;
};
}