Railway

Railway 提供者设置和使用方法。

获取您的 Railway 凭证

要使用 Railway 登录,您需要客户端 ID 和客户端密钥。您可以从 Railway 开发者设置 获取它们。

  1. 进入您的 Railway 账户的开发者设置
  2. 点击“创建 OAuth 应用”
  3. 将应用程序类型设置为“Web 应用程序”
  4. 将重定向 URL 设置为 http://localhost:3000/api/auth/callback/railway(本地开发),或生产环境中的应用 URL

请务必安全地保存您的客户端 ID 和客户端密钥。如果更改了认证路由的基础路径,请相应更新重定向 URL。

Railway 使用 PKCE(代码交换的密钥)来增强安全性。此功能由 Better Auth 自动处理。

配置提供者

要配置该提供者,您需要导入提供者并将其传递给认证实例的 socialProviders 选项。

auth.ts
import { betterAuth } from "better-auth"

export const auth = betterAuth({
    socialProviders: {
        railway: { 
            clientId: process.env.RAILWAY_CLIENT_ID as string, 
            clientSecret: process.env.RAILWAY_CLIENT_SECRET as string, 
        }, 
    },
})

使用方法

使用 Railway 登录

要使用 Railway 登录,您可以使用客户端提供的 signIn.social 函数。signIn 函数接收一个包含以下属性的对象:

  • provider:要使用的提供者,应设置为 railway
auth-client.ts
import { createAuthClient } from "better-auth/client"
const authClient = createAuthClient()

const signIn = async () => {
    const data = await authClient.signIn.social({
        provider: "railway"
    })
}

选项

有关所有社交提供者支持的完整选项列表,请参见 提供者选项。

可用权限范围

Railway OAuth 支持以下权限范围:

权限范围描述
openid所有请求必需(默认包含)
email访问用户的电子邮件地址(默认包含)
profile访问用户的姓名和头像(默认包含)
offline_access接收刷新令牌以实现长期访问
workspace:viewer查看用户选择的工作区
workspace:member成员权限访问用户选择的工作区
workspace:admin管理员权限访问用户选择的工作区
project:viewer查看用户选择的项目
project:member成员权限访问用户选择的项目

当请求工作区或项目权限时,用户将在授权同意界面选择具体要共享的工作区或项目。

您可以在配置提供者时指定额外的权限范围:

auth.ts
import { betterAuth } from "better-auth"

export const auth = betterAuth({
    socialProviders: {
        railway: {
            clientId: process.env.RAILWAY_CLIENT_ID as string,
            clientSecret: process.env.RAILWAY_CLIENT_SECRET as string,
            scope: ["workspace:viewer", "project:viewer"], 
        },
    },
})

当请求 offline_access 权限范围时,Railway 要求在授权 URL 中设置 prompt=consent:

railway: {
    clientId: process.env.RAILWAY_CLIENT_ID as string,
    clientSecret: process.env.RAILWAY_CLIENT_SECRET as string,
    scope: ["offline_access"],
    prompt: "consent", 
}

有关 Railway OAuth 实现的更多信息,请参阅 Railway 官方文档。