mirror of
https://github.com/vercel/commerce.git
synced 2025-05-13 05:07:51 +00:00
64 lines
2.5 KiB
TypeScript
64 lines
2.5 KiB
TypeScript
//See https://react.dev/reference/react-dom/hooks/useFormState
|
|
//https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations#forms
|
|
'use server';
|
|
|
|
import { redirect } from 'next/navigation';
|
|
import { cookies } from 'next/headers';
|
|
import {
|
|
generateCodeVerifier,
|
|
generateCodeChallenge,
|
|
generateRandomString,
|
|
CUSTOMER_API_CLIENT_ID,
|
|
ORIGIN_URL,
|
|
CUSTOMER_API_URL
|
|
} from 'lib/shopify/auth';
|
|
|
|
export async function doLogin(_: any) {
|
|
const customerAccountApiUrl = CUSTOMER_API_URL;
|
|
const clientId = CUSTOMER_API_CLIENT_ID;
|
|
const origin = ORIGIN_URL;
|
|
const loginUrl = new URL(`${customerAccountApiUrl}/auth/oauth/authorize`);
|
|
//console.log ("previous", prevState)
|
|
|
|
try {
|
|
//await addToCart(cartId, [{ merchandiseId: selectedVariantId, quantity: 1 }]);
|
|
loginUrl.searchParams.set('client_id', clientId);
|
|
loginUrl.searchParams.append('response_type', 'code');
|
|
loginUrl.searchParams.append('redirect_uri', `${origin}/authorize`);
|
|
loginUrl.searchParams.set(
|
|
'scope',
|
|
'openid email https://api.customers.com/auth/customer.graphql'
|
|
);
|
|
const verifier = await generateCodeVerifier();
|
|
//const newVerifier = verifier.replace("+", '_').replace("-",'_').replace("/",'_').trim()
|
|
const challenge = await generateCodeChallenge(verifier);
|
|
cookies().set('shop_verifier', verifier as string, {
|
|
// @ts-ignore
|
|
//expires: auth?.expires, //not necessary here
|
|
});
|
|
const state = await generateRandomString();
|
|
const nonce = await generateRandomString();
|
|
cookies().set('shop_state', state as string, {
|
|
// @ts-ignore
|
|
//expires: auth?.expires, //not necessary here
|
|
});
|
|
cookies().set('shop_nonce', nonce as string, {
|
|
// @ts-ignore
|
|
//expires: auth?.expires, //not necessary here
|
|
});
|
|
loginUrl.searchParams.append('state', state);
|
|
loginUrl.searchParams.append('nonce', nonce);
|
|
loginUrl.searchParams.append('code_challenge', challenge);
|
|
loginUrl.searchParams.append('code_challenge_method', 'S256');
|
|
//console.log ("loginURL", loginUrl)
|
|
//throw new Error ("Error") //this is how you throw an error, if you want to. Then the catch will execute
|
|
} catch (e) {
|
|
console.log('Error', e);
|
|
//you can throw error here or return - return goes back to form b/c of state, throw will throw the error boundary
|
|
//throw new Error ("Error")
|
|
return 'Error logging in. Please try again';
|
|
}
|
|
|
|
redirect(`${loginUrl}`); // Navigate to the new post page
|
|
}
|