Skip to main content
Complete reference for all methods available on StackClientApp and CurrentUser.

Authentication Methods

signInWithOAuth()

Initiate OAuth sign in with a provider.
await stackApp.signInWithOAuth('google');
provider
string
required
OAuth provider ID: 'google', 'github', 'microsoft', 'facebook', etc.
options
object
Returns: Promise<void> (redirects to OAuth provider)

signInWithCredential()

Sign in with email and password.
const result = await stackApp.signInWithCredential({
  email: '[email protected]',
  password: 'password123',
});

if (result.status === 'ok') {
  console.log('Signed in successfully!');
} else {
  console.error('Error:', result.error.message);
}
options
object
required
Returns: Promise<Result<void, Error>>

signUpWithCredential()

Create account with email and password.
const result = await stackApp.signUpWithCredential({
  email: '[email protected]',
  password: 'secure_password',
});

if (result.status === 'ok') {
  console.log('Account created!');
}
options
object
required
Returns: Promise<Result<void, Error>>

sendMagicLinkEmail()

Send a magic link to user’s email.
const result = await stackApp.sendMagicLinkEmail('[email protected]');

if (result.status === 'ok') {
  console.log('Magic link sent!');
  console.log('Nonce:', result.data.nonce);
}
email
string
required
Recipient email address
options
object
Returns: Promise<Result<{ nonce: string }, Error>> Sign in using a magic link code.
const code = new URLSearchParams(window.location.search).get('code');

const result = await stackApp.signInWithMagicLink(code);

if (result.status === 'ok') {
  console.log('Signed in!');
}
code
string
required
Magic link verification code from URL
options
object
Returns: Promise<Result<void, Error>>

signInWithPasskey()

Sign in using WebAuthn passkey.
const result = await stackApp.signInWithPasskey();

if (result.status === 'ok') {
  console.log('Signed in with passkey!');
}
Returns: Promise<Result<void, Error>>

Password Management

sendForgotPasswordEmail()

Send password reset email.
const result = await stackApp.sendForgotPasswordEmail('[email protected]');

if (result.status === 'ok') {
  console.log('Password reset email sent!');
}
email
string
required
User’s email address
options
object
Returns: Promise<Result<void, Error>>

resetPassword()

Reset password using verification code.
const code = new URLSearchParams(window.location.search).get('code');

const result = await stackApp.resetPassword({
  code,
  password: 'new_secure_password',
});

if (result.status === 'ok') {
  console.log('Password reset successfully!');
}
options
object
required
Returns: Promise<Result<void, Error>>

verifyPasswordResetCode()

Verify a password reset code is valid.
const code = new URLSearchParams(window.location.search).get('code');

const result = await stackApp.verifyPasswordResetCode(code);

if (result.status === 'ok') {
  console.log('Code is valid!');
}
code
string
required
Verification code to validate
Returns: Promise<Result<void, Error>>

Email Verification

verifyEmail()

Verify email address using verification code.
const code = new URLSearchParams(window.location.search).get('code');

const result = await stackApp.verifyEmail(code);

if (result.status === 'ok') {
  console.log('Email verified!');
}
code
string
required
Email verification code
Returns: Promise<Result<void, Error>>

User Methods

getUser()

Get the current authenticated user.
const user = await stackApp.getUser();

if (user) {
  console.log('User:', user.displayName);
} else {
  console.log('Not signed in');
}
options
object
Returns: Promise<CurrentUser | null>

getPartialUser()

Get partial user data from token only (faster, no API call).
const partialUser = await stackApp.getPartialUser({ from: 'token' });

if (partialUser) {
  console.log('User ID:', partialUser.id);
}
options
object
Returns: Promise<PartialUser | null>

redirectToSignIn()

Redirect to sign in page.
await stackApp.redirectToSignIn();
options
object
Returns: Promise<void>

redirectToSignUp()

Redirect to sign up page.
await stackApp.redirectToSignUp();
Returns: Promise<void>

redirectToAccountSettings()

Redirect to account settings.
await stackApp.redirectToAccountSettings();
Returns: Promise<void>

redirectToAfterSignIn()

Redirect to post-sign-in URL.
await stackApp.redirectToAfterSignIn();
Returns: Promise<void>

redirectToAfterSignUp()

Redirect to post-sign-up URL.
await stackApp.redirectToAfterSignUp();
Returns: Promise<void>

redirectToAfterSignOut()

Redirect to post-sign-out URL.
await stackApp.redirectToAfterSignOut();
Returns: Promise<void>

CurrentUser Methods

update()

Update user properties.
const user = await stackApp.getUser();

if (user) {
  await user.update({
    displayName: 'New Name',
    profileImageUrl: 'https://example.com/avatar.jpg',
  });
}
data
object
required
Returns: Promise<void>

signOut()

Sign out the current user.
const user = await stackApp.getUser();

if (user) {
  await user.signOut();
}
Returns: Promise<void>

delete()

Delete the user account.
const user = await stackApp.getUser();

if (user) {
  await user.delete();
}
Returns: Promise<void>

listTeams()

Get user’s teams.
const user = await stackApp.getUser();

if (user) {
  const teams = await user.listTeams();
  console.log('Teams:', teams);
}
Returns: Promise<Team[]>

getSelectedTeam()

Get currently selected team.
const user = await stackApp.getUser();

if (user) {
  const team = user.getSelectedTeam();
  console.log('Selected team:', team?.displayName);
}
Returns: Team | null

setSelectedTeam()

Set the selected team.
const user = await stackApp.getUser();
const teams = await user.listTeams();

if (teams.length > 0) {
  await user.setSelectedTeam(teams[0]);
}
team
Team
required
Team to select
Returns: Promise<void>

hasPermission()

Check if user has a permission.
const user = await stackApp.getUser();

if (user) {
  const isAdmin = await user.hasPermission('admin');
  console.log('Is admin:', isAdmin);
}
permission
string
required
Permission ID to check
Returns: Promise<boolean>

getConnectedAccounts()

Get connected OAuth accounts.
const user = await stackApp.getUser();

if (user) {
  const accounts = await user.getConnectedAccounts();
  console.log('Connected accounts:', accounts);
}
Returns: Promise<OAuthConnection[]>

Team Invitation Methods

verifyTeamInvitationCode()

Verify a team invitation code.
const code = new URLSearchParams(window.location.search).get('code');

const result = await stackApp.verifyTeamInvitationCode(code);

if (result.status === 'ok') {
  console.log('Invitation is valid!');
}
code
string
required
Team invitation code
Returns: Promise<Result<void, Error>>

acceptTeamInvitation()

Accept a team invitation.
const code = new URLSearchParams(window.location.search).get('code');

const result = await stackApp.acceptTeamInvitation(code);

if (result.status === 'ok') {
  console.log('Joined team!');
}
code
string
required
Team invitation code
Returns: Promise<Result<void, Error>>

getTeamInvitationDetails()

Get details about a team invitation.
const code = new URLSearchParams(window.location.search).get('code');

const result = await stackApp.getTeamInvitationDetails(code);

if (result.status === 'ok') {
  console.log('Team:', result.data.teamDisplayName);
}
code
string
required
Team invitation code
Returns: Promise<Result<{ teamDisplayName: string }, Error>>

Best Practices

Handle errors

Always check the status property of result objects.

Use async/await

All methods return promises - use async/await for cleaner code.

Check user existence

Always verify user is not null before calling user methods.

Store user state

Cache user data in your application state to avoid repeated API calls.

Build docs developers (and LLMs) love