Skip to content

Commit

Permalink
Accept session in addition to request (#190)
Browse files Browse the repository at this point in the history
* Update authenticate options type

* isAuthenticated and logout can accept session or request
  • Loading branch information
myleslinder authored Sep 6, 2022
1 parent 85ae174 commit 192504e
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 14 deletions.
31 changes: 18 additions & 13 deletions src/authenticator.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
import { redirect, SessionStorage } from "@remix-run/server-runtime";
import {
isSession,
redirect,
Session,
SessionStorage,
} from "@remix-run/server-runtime";
import { AuthenticateOptions, Strategy } from "./strategy";

export interface AuthenticateCallback<User> {
Expand Down Expand Up @@ -159,32 +164,32 @@ export class Authenticator<User = unknown> {
* }
*/
async isAuthenticated(
request: Request,
request: Request | Session,
options?: { successRedirect?: never; failureRedirect?: never }
): Promise<User | null>;
async isAuthenticated(
request: Request,
request: Request | Session,
options: { successRedirect: string; failureRedirect?: never }
): Promise<null>;
async isAuthenticated(
request: Request,
request: Request | Session,
options: { successRedirect?: never; failureRedirect: string }
): Promise<User>;
async isAuthenticated(
request: Request,
request: Request | Session,
options: { successRedirect: string; failureRedirect: string }
): Promise<null>;
async isAuthenticated(
request: Request,
request: Request | Session,
options:
| { successRedirect?: never; failureRedirect?: never }
| { successRedirect: string; failureRedirect?: never }
| { successRedirect?: never; failureRedirect: string }
| { successRedirect: string; failureRedirect: string } = {}
): Promise<User | null> {
let session = await this.sessionStorage.getSession(
request.headers.get("Cookie")
);
let session = isSession(request)
? request
: await this.sessionStorage.getSession(request.headers.get("Cookie"));

let user: User | null = session.get(this.sessionKey) ?? null;

Expand All @@ -205,12 +210,12 @@ export class Authenticator<User = unknown> {
* }
*/
async logout(
request: Request,
request: Request | Session,
options: { redirectTo: string }
): Promise<void> {
let session = await this.sessionStorage.getSession(
request.headers.get("Cookie")
);
let session = isSession(request)
? request
: await this.sessionStorage.getSession(request.headers.get("Cookie"));

throw redirect(options.redirectTo, {
headers: {
Expand Down
2 changes: 1 addition & 1 deletion src/strategy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export interface AuthenticateOptions {
* In what key of the session the errors will be set.
* @default "auth:error"
*/
sessionErrorKey?: string;
sessionErrorKey: string;
/**
* The key of the session used to set the strategy used to authenticate the
* user.
Expand Down

0 comments on commit 192504e

Please # to comment.