Remove Google and GitHub sign-in
Both providers were registered but never usable: all four client env vars are empty in production and no Account row has ever been created. Email and password is the only path that has ever worked. This also simplifies the invite gating that follows. With OAuth there were two redemption paths, an invite token that had to survive the provider round trip in a SameSite=Lax cookie, and an OAuthAccountNotLinked dead end for anyone who signed up with a password and later clicked a provider button. Now there is one path. Account, Session and VerificationToken stay in the schema. They are Auth.js's tables and dropping them would be a destructive migration for no benefit. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -9,11 +9,6 @@ NEXTAUTH_URL="http://localhost:3000"
|
|||||||
NEXTAUTH_SECRET="generate-with: openssl rand -base64 32"
|
NEXTAUTH_SECRET="generate-with: openssl rand -base64 32"
|
||||||
AUTH_TRUST_HOST="true" # Set to true when behind a reverse proxy
|
AUTH_TRUST_HOST="true" # Set to true when behind a reverse proxy
|
||||||
|
|
||||||
# OAuth Providers
|
|
||||||
GOOGLE_CLIENT_ID=""
|
|
||||||
GOOGLE_CLIENT_SECRET=""
|
|
||||||
GITHUB_CLIENT_ID=""
|
|
||||||
GITHUB_CLIENT_SECRET=""
|
|
||||||
|
|
||||||
# MinIO / S3-compatible storage
|
# MinIO / S3-compatible storage
|
||||||
MINIO_ENDPOINT="localhost"
|
MINIO_ENDPOINT="localhost"
|
||||||
|
|||||||
14
install.sh
14
install.sh
@@ -255,12 +255,6 @@ if [[ "$SKIP_CONFIG" == "false" ]]; then
|
|||||||
echo -e "${BOLD}AI Gateway:${NC}"
|
echo -e "${BOLD}AI Gateway:${NC}"
|
||||||
prompt_value SWITCHBOARD_URL "Switchboard gateway URL" "http://192.168.2.11:8787/v1"
|
prompt_value SWITCHBOARD_URL "Switchboard gateway URL" "http://192.168.2.11:8787/v1"
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo -e "${BOLD}OAuth Providers (optional — press Enter to skip):${NC}"
|
|
||||||
prompt_value GOOGLE_CID "Google Client ID" ""
|
|
||||||
prompt_value GOOGLE_CS "Google Client Secret" ""
|
|
||||||
prompt_value GITHUB_CID "GitHub Client ID" ""
|
|
||||||
prompt_value GITHUB_CS "GitHub Client Secret" ""
|
|
||||||
|
|
||||||
# Build DATABASE_URL
|
# Build DATABASE_URL
|
||||||
DATABASE_URL="postgresql://${PG_USER}:${PG_PASSWORD}@localhost:5432/${PG_DB}"
|
DATABASE_URL="postgresql://${PG_USER}:${PG_PASSWORD}@localhost:5432/${PG_DB}"
|
||||||
@@ -282,11 +276,6 @@ NEXTAUTH_URL="${APP_URL}"
|
|||||||
NEXTAUTH_SECRET="${AUTH_SECRET}"
|
NEXTAUTH_SECRET="${AUTH_SECRET}"
|
||||||
AUTH_TRUST_HOST="true"
|
AUTH_TRUST_HOST="true"
|
||||||
|
|
||||||
# ─── OAuth Providers ─────────────────────────────────────
|
|
||||||
GOOGLE_CLIENT_ID="${GOOGLE_CID}"
|
|
||||||
GOOGLE_CLIENT_SECRET="${GOOGLE_CS}"
|
|
||||||
GITHUB_CLIENT_ID="${GITHUB_CID}"
|
|
||||||
GITHUB_CLIENT_SECRET="${GITHUB_CS}"
|
|
||||||
|
|
||||||
# ─── MinIO / S3-compatible storage ───────────────────────
|
# ─── MinIO / S3-compatible storage ───────────────────────
|
||||||
MINIO_ENDPOINT="localhost"
|
MINIO_ENDPOINT="localhost"
|
||||||
@@ -418,7 +407,4 @@ echo -e " ${BOLD}${YELLOW}Next steps:${NC}"
|
|||||||
echo " 1. Open ${APP_URL_CHECK} and create your account"
|
echo " 1. Open ${APP_URL_CHECK} and create your account"
|
||||||
echo " 2. Add your Switchboard API key in Settings"
|
echo " 2. Add your Switchboard API key in Settings"
|
||||||
echo " 3. Set up a reverse proxy (nginx/Caddy) for HTTPS"
|
echo " 3. Set up a reverse proxy (nginx/Caddy) for HTTPS"
|
||||||
if [[ -z "${GOOGLE_CID:-}" ]] && [[ -z "${GITHUB_CID:-}" ]]; then
|
|
||||||
echo " 4. (Optional) Add OAuth providers in $ENV_FILE"
|
|
||||||
fi
|
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import { Button } from "@/components/ui/button"
|
|||||||
import { Input } from "@/components/ui/input"
|
import { Input } from "@/components/ui/input"
|
||||||
import { Label } from "@/components/ui/label"
|
import { Label } from "@/components/ui/label"
|
||||||
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
|
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
|
||||||
import { Separator } from "@/components/ui/separator"
|
|
||||||
|
|
||||||
export default function LoginPage() {
|
export default function LoginPage() {
|
||||||
const [email, setEmail] = useState("")
|
const [email, setEmail] = useState("")
|
||||||
@@ -93,50 +92,6 @@ export default function LoginPage() {
|
|||||||
</Button>
|
</Button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<div className="flex items-center gap-3 py-4">
|
|
||||||
<Separator className="flex-1" />
|
|
||||||
<span className="text-xs text-muted-foreground">or</span>
|
|
||||||
<Separator className="flex-1" />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="space-y-3">
|
|
||||||
<Button
|
|
||||||
variant="outline"
|
|
||||||
className="w-full"
|
|
||||||
onClick={() => signIn("google", { callbackUrl: "/dashboard" })}
|
|
||||||
>
|
|
||||||
<svg className="mr-2 h-4 w-4" viewBox="0 0 24 24">
|
|
||||||
<path
|
|
||||||
fill="currentColor"
|
|
||||||
d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z"
|
|
||||||
/>
|
|
||||||
<path
|
|
||||||
fill="currentColor"
|
|
||||||
d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"
|
|
||||||
/>
|
|
||||||
<path
|
|
||||||
fill="currentColor"
|
|
||||||
d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"
|
|
||||||
/>
|
|
||||||
<path
|
|
||||||
fill="currentColor"
|
|
||||||
d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
Continue with Google
|
|
||||||
</Button>
|
|
||||||
<Button
|
|
||||||
variant="outline"
|
|
||||||
className="w-full"
|
|
||||||
onClick={() => signIn("github", { callbackUrl: "/dashboard" })}
|
|
||||||
>
|
|
||||||
<svg className="mr-2 h-4 w-4" viewBox="0 0 24 24" fill="currentColor">
|
|
||||||
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" />
|
|
||||||
</svg>
|
|
||||||
Continue with GitHub
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p className="mt-4 text-center text-sm text-muted-foreground">
|
<p className="mt-4 text-center text-sm text-muted-foreground">
|
||||||
Don't have an account?{" "}
|
Don't have an account?{" "}
|
||||||
<Link href="/register" className="text-primary underline-offset-4 hover:underline">
|
<Link href="/register" className="text-primary underline-offset-4 hover:underline">
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
import NextAuth from "next-auth"
|
import NextAuth from "next-auth"
|
||||||
import Google from "next-auth/providers/google"
|
|
||||||
import GitHub from "next-auth/providers/github"
|
|
||||||
import Credentials from "next-auth/providers/credentials"
|
import Credentials from "next-auth/providers/credentials"
|
||||||
import { PrismaAdapter } from "@auth/prisma-adapter"
|
import { PrismaAdapter } from "@auth/prisma-adapter"
|
||||||
import { prisma } from "@/lib/prisma"
|
import { prisma } from "@/lib/prisma"
|
||||||
@@ -13,15 +11,11 @@ import { rateLimit } from "@/lib/rate-limit"
|
|||||||
*/
|
*/
|
||||||
const PUBLIC_ROUTES = ["/login", "/register", "/share"]
|
const PUBLIC_ROUTES = ["/login", "/register", "/share"]
|
||||||
|
|
||||||
|
// Email and password only. Google and GitHub were configured but never had
|
||||||
|
// credentials set and no account ever linked to them, and dropping them keeps
|
||||||
|
// invite redemption to a single path - no carrying an invite token through an
|
||||||
|
// OAuth round trip, and no OAuthAccountNotLinked dead end for members.
|
||||||
const providers = [
|
const providers = [
|
||||||
Google({
|
|
||||||
clientId: process.env.GOOGLE_CLIENT_ID,
|
|
||||||
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
|
|
||||||
}),
|
|
||||||
GitHub({
|
|
||||||
clientId: process.env.GITHUB_CLIENT_ID,
|
|
||||||
clientSecret: process.env.GITHUB_CLIENT_SECRET,
|
|
||||||
}),
|
|
||||||
Credentials({
|
Credentials({
|
||||||
name: "Email",
|
name: "Email",
|
||||||
credentials: {
|
credentials: {
|
||||||
|
|||||||
Reference in New Issue
Block a user