@auth/solid-start
@auth/solid-start
は現在実験的です。API は将来変更される予定です。
SolidStart Auth は、Auth.js の公式 SolidStart 統合です。数行のコードで SolidStart アプリに認証を追加する簡単な方法を提供します。
インストール
npm install @auth/core @auth/solid-start
AuthError
すべての Auth.js エラーの基本エラー クラスです。logger.error
オプションを介して、サーバー ログに適切にフォーマットされた方法で出力されるように最適化されています。
拡張
コンストラクター
new AuthError(message, errorOptions)
new AuthError(message?, errorOptions?): AuthError
パラメーター
パラメーター | 型 |
---|---|
message ? | string | ErrorOptions |
errorOptions ? | ErrorOptions |
戻り値
オーバーライド
Error.constructor
プロパティ
cause?
optional cause: Record<string, unknown> & {
err: Error;
};
型宣言
err?
optional err: Error;
message
message: string;
継承元
Error.message
name
name: string;
継承元
Error.name
stack?
optional stack: string;
継承元
Error.stack
type
type: ErrorType;
エラー タイプ。ログでエラーを識別するために使用されます。
prepareStackTrace()?
static optional prepareStackTrace: (err, stackTraces) => any;
スタック トレースをフォーマットするためのオプションのオーバーライド
参照
https://v8.dokyumento.jp/docs/stack-trace-api#customizing-stack-traces
パラメーター
パラメーター | 型 |
---|---|
err | Error |
stackTraces | CallSite [] |
戻り値
任意
継承元
Error.prepareStackTrace
stackTraceLimit
static stackTraceLimit: number;
継承元
Error.stackTraceLimit
メソッド
captureStackTrace()
static captureStackTrace(targetObject, constructorOpt?): void
ターゲットオブジェクトに .stack プロパティを作成します。
パラメータ
パラメーター | 型 |
---|---|
targetObject | オブジェクト |
constructorOpt ? | 関数 |
戻り値
void
継承元
Error.captureStackTrace
CredentialsSignin
Credentialsプロバイダーの authorize
コールバックからスローされる可能性があります。authorize
コールバック中にエラーが発生した場合、2つのことが起こりえます。
- ユーザーは、URLに
error=CredentialsSignin&code=credentials
を含めて、サインインページにリダイレクトされます。code
は構成可能です。 - フォームアクションをサーバー側で処理するフレームワークでこのエラーをスローした場合、ユーザーをリダイレクトする代わりにこのエラーがスローされるため、処理する必要があります。
拡張
コンストラクタ
new CredentialsSignin(message, errorOptions)
new CredentialsSignin(message?, errorOptions?): CredentialsSignin
パラメータ
パラメーター | 型 |
---|---|
message ? | string | ErrorOptions |
errorOptions ? | ErrorOptions |
戻り値
継承元
プロパティ
cause?
optional cause: Record<string, unknown> & {
err: Error;
};
型宣言
err?
optional err: Error;
継承元
code
code: string;
code
クエリパラメータに設定されるエラーコードです。
⚠ 注意: このプロパティはURLに含まれるため、機密性の高いエラーを示唆しないようにしてください。
デバッグが必要な場合は、常にサーバーに完全なエラーが記録されます。
一般的に、ユーザーが間違ったユーザー名またはパスワードを具体的に入力したかどうかを具体的に示唆することは推奨しません。代わりに「無効な資格情報」のようなものを試してください。
message
message: string;
継承元
name
name: string;
継承元
stack?
optional stack: string;
継承元
type
type: ErrorType;
エラー タイプ。ログでエラーを識別するために使用されます。
継承元
kind
static kind: string;
継承元
prepareStackTrace()?
static optional prepareStackTrace: (err, stackTraces) => any;
スタック トレースをフォーマットするためのオプションのオーバーライド
参照
https://v8.dokyumento.jp/docs/stack-trace-api#customizing-stack-traces
パラメータ
パラメーター | 型 |
---|---|
err | Error |
stackTraces | CallSite [] |
戻り値
任意
継承元
stackTraceLimit
static stackTraceLimit: number;
継承元
type
static type: string;
メソッド
captureStackTrace()
static captureStackTrace(targetObject, constructorOpt?): void
ターゲットオブジェクトに .stack プロパティを作成します。
パラメータ
パラメーター | 型 |
---|---|
targetObject | オブジェクト |
constructorOpt ? | 関数 |
戻り値
void
継承元
アカウント
通常、使用されているプロバイダーに関する情報を含み、OAuthプロバイダーによって返されるさまざまなトークンである TokenSet
も拡張します。
拡張
Partial
<TokenEndpointResponse
>
プロパティ
access_token?
optional readonly access_token: string;
継承元
Partial.access_token
authorization_details?
optional readonly authorization_details: AuthorizationDetails[];
継承元
Partial.authorization_details
expires_at?
optional expires_at: number;
TokenEndpointResponse.expires_in に基づいて計算された値。
TokenEndpointResponse.access_token が期限切れになる絶対タイムスタンプ(秒単位)。
この値は、TokenEndpointResponse.refresh_token とともにトークンローテーションを実装するために使用できます。
参照
- https://authjs.dokyumento.jp/guides/refresh-token-rotation#database-strategy
- https://www.rfc-editor.org/rfc/rfc6749#section-5.1
expires_in?
optional readonly expires_in: number;
継承元
Partial.expires_in
id_token?
optional readonly id_token: string;
継承元
Partial.id_token
provider
provider: string;
このアカウントのプロバイダーID。例:「google」。完全なリストはhttps://authjs.dokyumento.jp/reference/core/providers を参照してください。
providerAccountId
providerAccountId: string;
この値は、アカウントを作成するために使用されるプロバイダーのタイプによって異なります。
- oauth/oidc:
profile()
コールバックから返される OAuth アカウントの ID。 - email: ユーザーのメールアドレス。
- credentials:
authorize()
コールバックから返されるid
refresh_token?
optional readonly refresh_token: string;
継承元
Partial.refresh_token
scope?
optional readonly scope: string;
継承元
Partial.scope
token_type?
optional readonly token_type: Lowercase<string>;
注意: 値は大文字と小文字を区別しないため、常に小文字で返されます。
継承元
Partial.token_type
type
type: ProviderType;
このアカウントのプロバイダーのタイプ
userId?
optional userId: string;
このアカウントが属するユーザーのID
参照
https://authjs.dokyumento.jp/reference/core/adapters#adapteruser
DefaultSession
拡張元
プロパティ
expires
expires: string;
user?
optional user: User;
Profile
OAuthプロバイダーから返されるユーザー情報。
参照
https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims
インデックス可能
[claim
: string
]: unknown
プロパティ
address?
optional address: null | {
country: null | string;
formatted: null | string;
locality: null | string;
postal_code: null | string;
region: null | string;
street_address: null | string;
};
birthdate?
optional birthdate: null | string;
email?
optional email: null | string;
email_verified?
optional email_verified: null | boolean;
family_name?
optional family_name: null | string;
gender?
optional gender: null | string;
given_name?
optional given_name: null | string;
id?
optional id: null | string;
locale?
optional locale: null | string;
middle_name?
optional middle_name: null | string;
name?
optional name: null | string;
nickname?
optional nickname: null | string;
phone_number?
optional phone_number: null | string;
picture?
optional picture: any;
preferred_username?
optional preferred_username: null | string;
profile?
optional profile: null | string;
sub?
optional sub: null | string;
updated_at?
optional updated_at: null | string | number | Date;
website?
optional website: null | string;
zoneinfo?
optional zoneinfo: null | string;
Session
ログイン中のユーザーのアクティブなセッション。
拡張元
プロパティ
expires
expires: string;
継承元
user?
optional user: User;
継承元
SolidAuthConfig
Authメソッドを設定します。
例
import Auth, { type AuthConfig } from "@auth/core"
export const authConfig: AuthConfig = {...}
const request = new Request("https://example.com")
const response = await AuthHandler(request, authConfig)
参照
拡張元
プロパティ
adapter?
optional adapter: Adapter;
データベースアダプターを渡すためにadapterオプションを使用できます。
継承元
basePath?
optional basePath: string;
Auth.js APIエンドポイントのベースパス。
デフォルト
"/api/auth" in "next-auth"; "/auth" with all other frameworks
継承元
callbacks?
optional callbacks: {
jwt: (params) => Awaitable<null | JWT>;
redirect: (params) => Awaitable<string>;
session: (params) => Awaitable<Session | DefaultSession>;
signIn: (params) => Awaitable<string | boolean>;
};
コールバックは、アクションが実行されたときに何が起こるかを制御するために使用できる非同期関数です。コールバックは特にJSON Webトークンを伴うシナリオでは、データベースなしでアクセス制御を実装したり、外部データベースやAPIと統合したりできるため、非常に強力です。
jwt()?
optional jwt: (params) => Awaitable<null | JWT>;
このコールバックは、JSON Webトークンが作成された(つまりサインイン時)または更新された(つまりクライアントでセッションがアクセスされたとき)ときに呼び出されます。ここで返すすべてのものはJWTに保存され、セッションコールバックに転送されます。そこで、クライアントに返すものを制御できます。それ以外はフロントエンドから保持されます。JWTは、AUTH_SECRET環境変数を介してデフォルトで暗号化されます。
パラメーター
パラメーター | 型 | 説明 |
---|---|---|
params | オブジェクト | - |
params.account ? | null | Account | サインインに使用されたプロバイダーに関する情報が含まれています。 TokenSetも含まれています ノート trigger が"signIn" または"signUp" の場合に利用可能 |
params.isNewUser ? | boolean | 非推奨 代わりに trigger === "signUp" を使用 |
params.profile ? | プロファイル | プロバイダーから返されたOAuthプロファイル。 (OIDCの場合、デコードされたIDトークンまたは/userinfoレスポンスになります) ノート trigger が"signIn" の場合に利用可能。 |
params.session ? | 任意 | AuthConfig.session strategy: "jwt" を使用している場合、これはデータuseSession().update メソッドを介してクライアントから送信されます。⚠ 注意、このデータを使用する前に検証する必要があります。 |
params.token | JWT | trigger が"signIn" または"signUp" の場合、JWTのサブセットになります。name 、email 、およびimage が含まれます。それ以外の場合は、後続の呼び出しのための完全なJWTになります。 |
params.trigger ? | "update" | "signIn" | "signUp" | jwtコールバックが呼び出された理由を確認します。考えられる理由は次のとおりです - ユーザーサインイン:コールバックが初めて呼び出される場合、 user 、profile 、およびaccount が存在します。- ユーザーサインアップ:データベースでユーザーが初めて作成された場合(AuthConfig.session.strategyが "database" に設定されている場合)- 更新イベント: useSession().update メソッドによってトリガーされます。後者の場合、 trigger はundefined になります。 |
params.user | User | AdapterUser | OAuthConfig.profileまたはCredentialsConfig.authorizeコールバックの結果のいずれか。 ノート trigger が"signIn" または"signUp" の場合に利用可能。リソース - 認証情報プロバイダー - ユーザーデータベースモデル |
戻り値
redirect()?
optional redirect: (params) => Awaitable<string>;
このコールバックは、ユーザーがコールバックURLにリダイレクトされるたび(サインインまたはサインアウト時など)に呼び出されます。デフォルトでは、オリジンと同じホスト上のURLのみが許可されます。このコールバックを使用して、その動作をカスタマイズできます。
例
callbacks: {
async redirect({ url, baseUrl }) {
// Allows relative callback URLs
if (url.startsWith("/")) return `${baseUrl}${url}`
// Allows callback URLs on the same origin
if (new URL(url).origin === baseUrl) return url
return baseUrl
}
}
パラメータ
パラメーター | 型 | 説明 |
---|---|---|
params | オブジェクト | - |
params.baseUrl | 文字列 | サイトのデフォルトのベースURL(フォールバックとして使用できます) |
params.url | 文字列 | クライアントによってコールバックURLとして提供されるURL |
戻り値
Awaitable
<string
>
session()?
optional session: (params) => Awaitable<Session | DefaultSession>;
このコールバックは、セッションがチェックされるたびに呼び出されます。(例:/api/session
エンドポイントの呼び出し時、useSession
または getSession
の使用時)。戻り値はクライアントに公開されるため、ここで何を返すかには注意してください! JWTコールバックを通じてトークンに追加したものをクライアントで利用できるようにする場合は、ここでも明示的に返す必要があります。
⚠ デフォルトでは、セキュリティを強化するために、トークンのサブセット(メール、名前、画像)のみが返されます。
token引数はjwtセッションストラテジーを使用している場合にのみ使用可能で、user引数はデータベースセッションストラテジーを使用している場合にのみ使用可能です。
例
callbacks: {
async session({ session, token, user }) {
// Send properties to the client, like an access_token from a provider.
session.accessToken = token.accessToken
return session
}
}
パラメータ
パラメーター | 型 |
---|---|
params | { session : { user : AdapterUser ; } & AdapterSession ; user : AdapterUser ; } & { session : Session ; token : JWT ; } & { newSession : any ; trigger : "update" ; } |
戻り値
Awaitable
<Session
| DefaultSession
>
signIn()?
optional signIn: (params) => Awaitable<string | boolean>;
ユーザーがサインインを許可されるかどうかを制御します。true
を返すとサインインフローが続行されます。false
を返すかエラーをスローするとサインインフローが停止し、ユーザーはエラーページにリダイレクトされます。文字列を返すと、ユーザーは指定されたURLにリダイレクトされます。
処理されないエラーは、元のエラーに設定されたメッセージとともに AccessDenied
をスローします。
例
callbacks: {
async signIn({ profile }) {
// Only allow sign in for users with email addresses ending with "yourdomain.com"
return profile?.email?.endsWith("@yourdomain.com")
}
パラメータ
パラメーター | 型 | 説明 |
---|---|---|
params | オブジェクト | - |
params.account ? | null | Account | - |
params.credentials ? | Record <string , CredentialInput > | Credentialsプロバイダーが使用されている場合、ユーザーの認証情報が含まれます |
params.email ? | オブジェクト | Emailプロバイダーが使用されている場合、最初の呼び出しで、verificationRequest: true プロパティが含まれ、検証リクエストフローでトリガーされていることを示します。ユーザーがサインインリンクをクリックした後にコールバックが呼び出された場合、 このプロパティは存在しません。 verificationRequest プロパティを確認して、ブロックリスト上のアドレスまたはドメインへのメール送信を回避するか、許可リスト内のメールアドレスに対してのみ明示的に生成できます。 許可リストにあるメールアドレスの場合。 |
params.email.verificationRequest ? | boolean | - |
params.profile ? | プロファイル | OAuthプロバイダーが使用されている場合、プロバイダーから返された完全な OAuthプロファイルが含まれます。 |
params.user | User | AdapterUser | - |
戻り値
Awaitable
<string
| boolean
>
継承元
cookies?
optional cookies: Partial<CookiesOptions>;
Auth.jsで使用されるCookieの名前とオプションのデフォルトをオーバーライドできます。カスタムプロパティを使用して1つ以上のCookieを指定でき、欠落しているオプションはAuth.jsで定義されたデフォルト値を使用します。この機能を使用する場合は、開発ビルドと実運用ビルドで異なるCookieポリシーを設定するための条件付き動作を作成することになるでしょう。これにより、組み込みの動的ポリシーからオプトアウトすることになります。
- ⚠ これは高度なオプションです。 高度なオプションは、基本オプションと同じように渡されますが、複雑な影響や副作用がある場合があります。非常に慣れている場合を除き、高度なオプションの使用は避けるようにしてください。
デフォルト
{}
継承元
debug?
optional debug: boolean;
認証およびデータベース操作のデバッグメッセージを有効にするには、debugをtrueに設定します。
- ⚠ カスタムの AuthConfig.logger を追加した場合、この設定は無視されます。
デフォルト
false
継承元
events?
optional events: {
createUser: (message) => Awaitable<void>;
linkAccount: (message) => Awaitable<void>;
session: (message) => Awaitable<void>;
signIn: (message) => Awaitable<void>;
signOut: (message) => Awaitable<void>;
updateUser: (message) => Awaitable<void>;
};
イベントは、応答を返さない非同期関数であり、監査ログに役立ちます。以下のイベントのいずれかにハンドラーを指定できます。例:デバッグまたは監査ログの作成。メッセージオブジェクトの内容は、フロー(OAuthまたはEmail認証フロー、JWTまたはデータベースセッションなど)によって異なりますが、通常はユーザーオブジェクトやJSON Web Tokenの内容、およびイベントに関連するその他の情報が含まれます。
デフォルト
{}
createUser()?
optional createUser: (message) => Awaitable<void>;
パラメータ
パラメーター | 型 |
---|---|
message | オブジェクト |
message.user | ユーザー |
戻り値
Awaitable
<void
>
linkAccount()?
optional linkAccount: (message) => Awaitable<void>;
パラメータ
パラメーター | 型 |
---|---|
message | オブジェクト |
message.account | アカウント |
message.profile | User | AdapterUser |
message.user | User | AdapterUser |
戻り値
Awaitable
<void
>
session()?
optional session: (message) => Awaitable<void>;
メッセージオブジェクトには、JWTまたはデータベース永続セッションのどちらを使用しているかに応じて、以下のいずれかが含まれます
token
: このセッションのJWT。session
: アダプターからのセッションオブジェクト。
パラメータ
パラメーター | 型 |
---|---|
message | オブジェクト |
message.session | セッション |
message.token | JWT |
戻り値
Awaitable
<void
>
signIn()?
optional signIn: (message) => Awaitable<void>;
credentials
タイプの認証を使用している場合、ユーザーは資格情報プロバイダーからの生の応答です。他のプロバイダーの場合、アダプターからのユーザーオブジェクト、アカウント、およびユーザーがアダプターにとって新しいかどうかを示すインジケーターを取得します。
パラメータ
パラメーター | 型 |
---|---|
message | オブジェクト |
message.account ? | null | Account |
message.isNewUser ? | boolean |
message.profile ? | プロファイル |
message.user | ユーザー |
戻り値
Awaitable
<void
>
signOut()?
optional signOut: (message) => Awaitable<void>;
メッセージオブジェクトには、JWTまたはデータベース永続セッションのどちらを使用しているかに応じて、以下のいずれかが含まれます
token
: このセッションのJWT。session
: 終了するアダプターからのセッションオブジェクト。
パラメータ
パラメーター | 型 |
---|---|
message | { session : undefined | null | void | AdapterSession ; } | { token : null | JWT ; } |
戻り値
Awaitable
<void
>
updateUser()?
optional updateUser: (message) => Awaitable<void>;
パラメータ
パラメーター | 型 |
---|---|
message | オブジェクト |
message.user | ユーザー |
戻り値
Awaitable
<void
>
継承元
experimental?
optional experimental: {
enableWebAuthn: boolean;
};
このオプションを使用して、実験的な機能を有効にします。有効にすると、コンソールに警告メッセージが表示されます。
注
実験的な機能は安定性が保証されておらず、予告なしに変更または削除される可能性があります。注意して使用してください。
デフォルト
{}
enableWebAuthn?
optional enableWebAuthn: boolean;
WebAuthnサポートを有効にします。
デフォルト
false
継承元
jwt?
optional jwt: Partial<JWTOptions>;
AuthConfig.adapter が指定されていない場合、JSON Web Token はデフォルトで有効になります。JSON Web Token はデフォルトで暗号化 (JWE) されます。この動作を維持することを推奨します。
継承元
logger?
optional logger: Partial<LoggerInstance>;
ロガーレベルを上書きする(undefined
レベルは組み込みのロガーを使用します)。また、NextAuth のログをインターセプトします。このオプションを使用すると、NextAuth のログをサードパーティのロギングサービスに送信できます。
例
// /auth.ts
import log from "logging-service"
export const { handlers, auth, signIn, signOut } = NextAuth({
logger: {
error(code, ...message) {
log.error(code, message)
},
warn(code, ...message) {
log.warn(code, message)
},
debug(code, ...message) {
log.debug(code, message)
}
}
})
- ⚠ 設定した場合、AuthConfig.debug オプションは無視されます。
デフォルト
console
継承元
pages?
optional pages: Partial<PagesOptions>;
カスタムのサインイン、サインアウト、エラーページを作成したい場合は、使用する URL を指定します。指定されたページは、対応する組み込みページを上書きします。
デフォルト
{}
例
pages: {
signIn: '/auth/signin',
signOut: '/auth/signout',
error: '/auth/error',
verifyRequest: '/auth/verify-request',
newUser: '/auth/new-user'
}
継承元
prefix?
optional prefix: string;
認証ルートのベースパスを定義します。
デフォルト
'/api/auth'
providers
providers: Provider[];
サインインのための認証プロバイダーのリスト(例:Google、Facebook、Twitter、GitHub、Emailなど)。順序は任意です。これは、組み込みのプロバイダーの1つ、またはカスタムプロバイダーを持つオブジェクトのいずれかになります。
デフォルト
[]
継承元
raw?
optional raw: typeof raw;
継承元
redirectProxyUrl?
optional redirectProxyUrl: string;
設定すると、OAuthサインインフロー中に、認証リクエストのredirect_uri
はこの値に基づいて設定されます。
これは、OAuthプロバイダーが単一のredirect_uri
のみをサポートする場合、または、最終的なデプロイURLを事前に知らない(Vercelのような)プレビューURLでOAuthを使用したい場合に役立ちます。
URLには、Auth.jsが初期化される場所までのフルパスを含める必要があります。
注記
これにより、プロバイダーのstate
OAuth2Config.checks が自動的に有効になります。
例
"https://authjs.example.com/api/auth"
また、プロバイダーごとに個別に上書きすることもできます。
例
GitHub({
...
redirectProxyUrl: "https://github.example.com/api/auth"
})
デフォルト
AUTH_REDIRECT_PROXY_URL
環境変数
継承元
secret?
optional secret: string | string[];
トークンのハッシュ化、クッキーの署名、暗号鍵の生成に使用されるランダムな文字列。
ランダムな文字列を生成するには、Auth.js CLIを使用できます:npx auth secret
注記
また、複数のシークレットの配列を渡すこともできます。その場合、JWTの復号化に成功した最初のシークレットが使用されます。これは、既存のセッションを無効にすることなく、シークレットをローテーションする場合に便利です。新しいシークレットは配列の先頭に追加する必要があり、これはすべての新しいセッションに使用されます。
継承元
session?
optional session: {
generateSessionToken: () => string;
maxAge: number;
strategy: "jwt" | "database";
updateAge: number;
};
JWTを使用するか、データベースを使用するか、アイドル状態のセッションが期限切れになるまでの時間、またはデータベースを使用している場合の書き込み操作を調整するなど、セッションを設定します。
generateSessionToken()?
optional generateSessionToken: () => string;
データベースベースのセッション用にカスタムセッショントークンを生成します。デフォルトでは、Node.jsのバージョンに応じてランダムなUUIDまたは文字列が生成されます。ただし、使用する独自のカスタム文字列(CUIDなど)を指定できます。
デフォルト
Node.jsのバージョンに応じて、randomUUID
または randomBytes.toHex
戻り値
文字列
maxAge?
optional maxAge: number;
セッションの有効期限が切れるまでの、現在からの相対時間(秒単位)
デフォルト
2592000 // 30 days
strategy?
optional strategy: "jwt" | "database";
ユーザーセッションを保存する方法を選択します。デフォルトは、セッションクッキー内の暗号化されたJWT(JWE)である"jwt"
です。
ただし、adapter
を使用する場合は、デフォルトで"database"
になります。明示的に"jwt"
を定義することで、JWTセッションを強制的に使用できます。
"database"
を使用する場合、セッションクッキーにはsessionToken
の値のみが含まれ、これはデータベース内のセッションを検索するために使用されます。
ドキュメント | アダプター | JSON Web Tokenについて
updateAge?
optional updateAge: number;
セッションを更新する頻度(秒単位)。0
に設定すると、セッションは毎回更新されます。
デフォルト
86400 // 1 day
継承元
skipCSRFCheck?
optional skipCSRFCheck: typeof skipCSRFCheck;
継承元
theme?
optional theme: Theme;
組み込みのAuthConfig.pagesのテーマを変更します。
継承元
trustHost?
optional trustHost: boolean;
Auth.jsは、正常に機能するために、受信リクエストのhost
ヘッダーに依存しています。このため、このプロパティをtrue
に設定する必要があります。
デプロイプラットフォームがhost
ヘッダーを安全に設定していることを確認してください。
公式のAuth.jsベースのライブラリは、host
ヘッダーを安全に設定することがわかっている一部のデプロイプラットフォーム(例:Vercel)に対して、この値を自動的に設定しようとします。
継承元
useSecureCookies?
optional useSecureCookies: boolean;
true
に設定すると、NextAuth.jsによって設定されたすべてのクッキーは、HTTPS URLからのみアクセスできるようになります。このオプションは、開発者の利便性のために、http://
で始まるURL(例:https://:3000)ではデフォルトでfalse
になります。このセキュリティ機能を無効にして、非セキュアなURLからクッキーにアクセスできるようにするには、このオプションを手動でfalse
に設定できます(推奨されません)。
- ⚠ これは高度なオプションです。 高度なオプションは、基本オプションと同じように渡されますが、複雑な影響や副作用がある場合があります。非常に慣れている場合を除き、高度なオプションの使用は避けるようにしてください。
デフォルトは、HTTPではfalse
、HTTPSサイトではtrue
です。
継承元
ユーザー
OAuthプロバイダーのprofile
コールバックで返されるオブジェクトの形状。これは、データベースを使用する場合、jwt
およびsession
コールバック、またはsession
コールバックの2番目のパラメータで利用できます。
拡張元:
プロパティ
email?
optional email: null | string;
id?
optional id: string;
image?
optional image: null | string;
name?
optional name: null | string;
GetSessionResult
type GetSessionResult: Promise<Session | null>;
customFetch
const customFetch: unique symbol;
このオプションを使用すると、プロバイダーがプロバイダーのOAuthエンドポイントに直接リクエストを行う際に使用するデフォルトのfetch
関数をオーバーライドできます。誤った使用は、セキュリティ上の影響を及ぼす可能性があります。
企業プロキシ、カスタムフェッチライブラリ、キャッシュ検出エンドポイントのサポート、テスト用のモックの追加、ロギング、非仕様準拠プロバイダーのカスタムヘッダー/パラメーターの設定などに使用できます。
例
import { Auth, customFetch } from "@auth/core"
import GitHub from "@auth/core/providers/github"
const dispatcher = new ProxyAgent("my.proxy.server")
function proxy(...args: Parameters<typeof fetch>): ReturnType<typeof fetch> {
return undici(args[0], { ...(args[1] ?? {}), dispatcher })
}
const response = await Auth(request, {
providers: [GitHub({ [customFetch]: proxy })]
})
参照
- https://undici.nodejs.org/#/docs/api/ProxyAgent?id=example-basic-proxy-request-with-local-agent-dispatcher
- https://authjs.dokyumento.jp/guides/corporate-proxy
SolidAuth()
SolidAuth(config): {
GET: Promise<undefined | Response>;
POST: Promise<undefined | Response>;
}
セットアップ
認証シークレットを生成し、環境変数として設定します
AUTH_SECRET=your_auth_secret
APIハンドラーの作成
この例ではgithubを使用します。次の環境変数を設定してください
GITHUB_ID=your_github_oauth_id
GITHUB_SECRET=your_github_oauth_secret
// routes/api/auth/[...solidauth].ts
import { SolidAuth, type SolidAuthConfig } from "@auth/solid-start"
import GitHub from "@auth/core/providers/github"
export const authOpts: SolidAuthConfig = {
providers: [
GitHub({
clientId: process.env.GITHUB_ID,
clientSecret: process.env.GITHUB_SECRET,
}),
],
debug: false,
}
export const { GET, POST } = SolidAuth(authOpts)
現在のセッションの取得
import { getSession } from "@auth/solid-start"
import { createServerData$ } from "solid-start/server"
import { authOpts } from "~/routes/api/auth/[...solidauth]"
export const useSession = () => {
return createServerData$(
async (_, { request }) => {
return await getSession(request, authOpts)
},
{ key: () => ["auth_user"] }
)
}
// useSession returns a resource:
const session = useSession()
const loading = session.loading
const user = () => session()?.user
保護されたルート
SSRを使用する場合
SSRを使用する場合、Show
コンポーネントを使用してサスペンスをトリガーするProtected
コンポーネントを作成することをお勧めします。それはこのようになるはずです
// components/Protected.tsx
import { type Session } from "@auth/core/types";
import { getSession } from "@auth/solid-start";
import { Component, Show } from "solid-js";
import { useRouteData } from "solid-start";
import { createServerData$, redirect } from "solid-start/server";
import { authOpts } from "~/routes/api/auth/[...solidauth]";
const Protected = (Comp: IProtectedComponent) => {
const routeData = () => {
return createServerData$(
async (_, event) => {
const session = await getSession(event.request, authOpts);
if (!session || !session.user) {
throw redirect("/");
}
return session;
},
{ key: () => ["auth_user"] }
);
};
return {
routeData,
Page: () => {
const session = useRouteData<typeof routeData>();
return (
<Show when={session()} keyed>
{(sess) => <Comp {...sess} />}
</Show>
);
},
};
};
type IProtectedComponent = Component<Session>;
export default Protected;
このように使用できます
// routes/protected.tsx
import Protected from "~/components/Protected";
export const { routeData, Page } = Protected((session) => {
return (
<main class="flex flex-col gap-2 items-center">
<h1>This is a protected route</h1>
</main>
);
});
export default Page;
CSRを使用する場合
CSRを使用する場合、Protected
コンポーネントは期待どおりに機能せず、画面がちらつく原因になります。これを修正するには、Solid-Startミドルウェアを使用します
// entry-server.tsx
import { Session } from "@auth/core";
import { getSession } from "@auth/solid-start";
import { redirect } from "solid-start";
import {
StartServer,
createHandler,
renderAsync,
} from "solid-start/entry-server";
import { authOpts } from "./routes/api/auth/[...solidauth]";
const protectedPaths = ["/protected"]; // add any route you wish in here
export default createHandler(
({ forward }) => {
return async (event) => {
if (protectedPaths.includes(new URL(event.request.url).pathname)) {
const session = await getSession(event.request, authOpts);
if (!session) {
return redirect("/");
}
}
return forward(event);
};
},
renderAsync((event) => <StartServer event={event} />)
);
これで、保護されたルートを作成できます
// routes/protected.tsx
export default () => {
return (
<main class="flex flex-col gap-2 items-center">
<h1>This is a protected route</h1>
</main>
);
};
CSRメソッドはSSRを使用する場合にも機能するはずですが、SSRメソッドはCSRを使用する場合は機能しないはずです
パラメータ
パラメーター | 型 |
---|---|
config | SolidAuthConfig |
戻り値
{
GET: Promise<undefined | Response>;
POST: Promise<undefined | Response>;
}
GET()
パラメータ
パラメーター | 型 |
---|---|
event | 任意 |
戻り値
POST()
パラメータ
パラメーター | 型 |
---|---|
event | 任意 |
戻り値
getSession()
getSession(req, options): GetSessionResult
パラメータ
パラメーター | 型 |
---|---|
req | Request |
options | Omit <AuthConfig , "raw" > |