@profullstack/auth-system
Version:
Flexible authentication system with user registration, login/logout, password reset, and session management
202 lines (155 loc) • 6.06 kB
JavaScript
/**
* Basic usage examples for @profullstack/auth-system
*/
import { createAuthSystem, MemoryAdapter } from '../src/index.js';
// Create an auth system with default options (in-memory storage)
const authSystem = createAuthSystem({
tokenOptions: {
secret: 'your-secret-key-here',
accessTokenExpiry: 3600, // 1 hour
refreshTokenExpiry: 604800 // 7 days
},
passwordOptions: {
minLength: 8,
requireUppercase: true,
requireLowercase: true,
requireNumbers: true,
requireSpecialChars: false
}
});
// Sample email sending function (mock implementation)
const sendEmail = async (emailData) => {
console.log('Sending email:');
console.log(`To: ${emailData.to}`);
console.log(`From: ${emailData.from}`);
console.log(`Subject: ${emailData.subject}`);
console.log(`Text: ${emailData.text}`);
console.log('---');
};
/**
* Run the examples
*/
async function runExamples() {
try {
console.log('Running authentication system examples...\n');
// Example 1: Register a new user
console.log('Example 1: Registering a new user');
const registrationResult = await authSystem.register({
email: 'user@example.com',
password: 'Password123',
profile: {
firstName: 'John',
lastName: 'Doe'
},
autoVerify: true // Skip email verification for this example
});
console.log('Registration result:', registrationResult);
console.log();
// Store tokens for later use
const { tokens } = registrationResult;
// Example 2: Login
console.log('Example 2: Logging in');
const loginResult = await authSystem.login({
email: 'user@example.com',
password: 'Password123'
});
console.log('Login result:', loginResult);
console.log();
// Example 3: Get user profile
console.log('Example 3: Getting user profile');
const profileResult = await authSystem.getProfile(loginResult.user.id);
console.log('Profile result:', profileResult);
console.log();
// Example 4: Update user profile
console.log('Example 4: Updating user profile');
const updateProfileResult = await authSystem.updateProfile({
userId: loginResult.user.id,
profile: {
firstName: 'John',
lastName: 'Doe',
phoneNumber: '555-123-4567',
address: {
street: '123 Main St',
city: 'Anytown',
state: 'CA',
zipCode: '12345'
}
}
});
console.log('Update profile result:', updateProfileResult);
console.log();
// Example 5: Change password
console.log('Example 5: Changing password');
const changePasswordResult = await authSystem.changePassword({
userId: loginResult.user.id,
currentPassword: 'Password123',
newPassword: 'NewPassword123'
});
console.log('Change password result:', changePasswordResult);
console.log();
// Example 6: Login with new password
console.log('Example 6: Logging in with new password');
const newLoginResult = await authSystem.login({
email: 'user@example.com',
password: 'NewPassword123'
});
console.log('New login result:', newLoginResult);
console.log();
// Example 7: Validate token
console.log('Example 7: Validating token');
const tokenValidationResult = await authSystem.validateToken(newLoginResult.tokens.accessToken);
console.log('Token validation result:', tokenValidationResult);
console.log();
// Example 8: Refresh token
console.log('Example 8: Refreshing token');
const refreshTokenResult = await authSystem.refreshToken(newLoginResult.tokens.refreshToken);
console.log('Refresh token result:', refreshTokenResult);
console.log();
// Example 9: Request password reset
console.log('Example 9: Requesting password reset');
// Set up email sending function for password reset
authSystem.emailOptions.sendEmail = sendEmail;
authSystem.emailOptions.fromEmail = 'noreply@example.com';
const resetPasswordResult = await authSystem.resetPassword('user@example.com');
console.log('Reset password result:', resetPasswordResult);
console.log();
// In a real application, the user would receive an email with a reset token
// For this example, we'll use the token from the development environment
const resetToken = resetPasswordResult.resetToken;
// Example 10: Confirm password reset
console.log('Example 10: Confirming password reset');
const resetPasswordConfirmResult = await authSystem.resetPasswordConfirm({
token: resetToken,
password: 'ResetPassword123'
});
console.log('Reset password confirm result:', resetPasswordConfirmResult);
console.log();
// Example 11: Login with reset password
console.log('Example 11: Logging in with reset password');
const resetLoginResult = await authSystem.login({
email: 'user@example.com',
password: 'ResetPassword123'
});
console.log('Reset login result:', resetLoginResult);
console.log();
// Example 12: Logout
console.log('Example 12: Logging out');
const logoutResult = await authSystem.logout(resetLoginResult.tokens.refreshToken);
console.log('Logout result:', logoutResult);
console.log();
// Example 13: Try to use invalidated refresh token
console.log('Example 13: Trying to use invalidated refresh token');
try {
const invalidRefreshResult = await authSystem.refreshToken(resetLoginResult.tokens.refreshToken);
console.log('Invalid refresh result:', invalidRefreshResult);
} catch (error) {
console.log('Error refreshing invalidated token:', error.message);
}
console.log();
console.log('All examples completed successfully!');
} catch (error) {
console.error('Error running examples:', error);
}
}
// Run the examples
runExamples();