rsnext/examples/with-firebase-authentication-serverless/utils/auth/user.js
Kevin Jennison 34f1aefa4a Add example: with-firebase-authentication-serverless (#10078)
* Start from existing example

* Upgrade some dependencies

* Use dotenv

* Remove custom server

* Add serverless Firebase auth

* Add TODOs

* Update project name

* Fix build script

* Remove server middleware from client JS bundle

* Add logout functionality

* Redirect to auth page on logout

* Remove TODO

* Add comments about the cookie-session approach

* Remove the sessions folder

* Add comments for eslint

* Remove unused files

* Clarify comment

* Update README.md

* Rename variable for clarity

* Update README.md

* Change some comments

* Add more to gitignore

* Remove the bundle analyzer

* Move server-side auth user logic from _app.js to a HOC to support static HTML rendering

Co-authored-by: Joe Haddad <timer150@gmail.com>
2020-01-20 16:12:48 -05:00

44 lines
1.5 KiB
JavaScript

import { get, has } from 'lodash/object'
/**
* Take the user object from Firebase (from either the Firebase admin SDK or
* or the client-side Firebase JS SDK) and return a consistent AuthUser object.
* @param {Object} firebaseUser - A decoded Firebase user token or JS SDK
* Firebase user object.
* @return {Object|null} AuthUser - The user object.
* @return {String} AuthUser.id - The user's ID
* @return {String} AuthUser.email - The user's email
* @return {Boolean} AuthUser.emailVerified - Whether the user has verified their email
*/
export const createAuthUser = firebaseUser => {
if (!firebaseUser || !firebaseUser.uid) {
return null
}
return {
id: get(firebaseUser, 'uid'),
email: get(firebaseUser, 'email'),
emailVerified: has(firebaseUser, 'emailVerified')
? get(firebaseUser, 'emailVerified') // Firebase JS SDK
: get(firebaseUser, 'email_verified'), // Firebase admin SDK
}
}
/**
* Create an object with an AuthUser object and AuthUserToken value.
* @param {Object} firebaseUser - A decoded Firebase user token or JS SDK
* Firebase user object.
* @param {String} firebaseToken - A Firebase auth token string.
* @return {Object|null} AuthUserInfo - The auth user info object.
* @return {String} AuthUserInfo.AuthUser - An AuthUser object (see
* `createAuthUser` above).
* @return {String} AuthUser.token - The user's encoded Firebase token.
*/
export const createAuthUserInfo = ({
firebaseUser = null,
token = null,
} = {}) => {
return {
AuthUser: createAuthUser(firebaseUser),
token,
}
}