Documentation ¶
Overview ¶
Package auth contains functions for minting custom authentication tokens, verifying Firebase ID tokens, and managing users in a Firebase project.
Index ¶
- func IsEmailAlreadyExists(err error) bool
- func IsIDTokenRevoked(err error) bool
- func IsInsufficientPermission(err error) bool
- func IsPhoneNumberAlreadyExists(err error) bool
- func IsProjectNotFound(err error) bool
- func IsSessionCookieRevoked(err error) bool
- func IsUIDAlreadyExists(err error) bool
- func IsUnknown(err error) bool
- func IsUserNotFound(err error) bool
- type Client
- func (c *Client) CreateUser(ctx context.Context, user *UserToCreate) (*UserRecord, error)
- func (c *Client) CustomToken(ctx context.Context, uid string) (string, error)
- func (c *Client) CustomTokenWithClaims(ctx context.Context, uid string, devClaims map[string]interface{}) (string, error)
- func (c *Client) DeleteUser(ctx context.Context, uid string) error
- func (c *Client) GetUser(ctx context.Context, uid string) (*UserRecord, error)
- func (c *Client) GetUserByEmail(ctx context.Context, email string) (*UserRecord, error)
- func (c *Client) GetUserByPhoneNumber(ctx context.Context, phone string) (*UserRecord, error)
- func (c *Client) ImportUsers(ctx context.Context, users []*UserToImport, opts ...UserImportOption) (*UserImportResult, error)
- func (c *Client) RevokeRefreshTokens(ctx context.Context, uid string) error
- func (c *Client) SessionCookie(ctx context.Context, idToken string, expiresIn time.Duration) (string, error)
- func (c *Client) SetCustomUserClaims(ctx context.Context, uid string, customClaims map[string]interface{}) error
- func (c *Client) UpdateUser(ctx context.Context, uid string, user *UserToUpdate) (ur *UserRecord, err error)
- func (c *Client) Users(ctx context.Context, nextPageToken string) *UserIterator
- func (c *Client) VerifyIDToken(ctx context.Context, idToken string) (*Token, error)
- func (c *Client) VerifyIDTokenAndCheckRevoked(ctx context.Context, idToken string) (*Token, error)
- func (c *Client) VerifySessionCookie(ctx context.Context, sessionCookie string) (*Token, error)
- func (c *Client) VerifySessionCookieAndCheckRevoked(ctx context.Context, sessionCookie string) (*Token, error)
- type ErrorInfo
- type ExportedUserRecord
- type Token
- type UserImportHash
- type UserImportOption
- type UserImportResult
- type UserInfo
- type UserIterator
- type UserMetadata
- type UserProvider
- type UserRecord
- type UserToCreate
- func (u *UserToCreate) Disabled(disabled bool) *UserToCreate
- func (u *UserToCreate) DisplayName(name string) *UserToCreate
- func (u *UserToCreate) Email(email string) *UserToCreate
- func (u *UserToCreate) EmailVerified(verified bool) *UserToCreate
- func (u *UserToCreate) Password(pw string) *UserToCreate
- func (u *UserToCreate) PhoneNumber(phone string) *UserToCreate
- func (u *UserToCreate) PhotoURL(url string) *UserToCreate
- func (u *UserToCreate) UID(uid string) *UserToCreate
- type UserToImport
- func (u *UserToImport) CustomClaims(claims map[string]interface{}) *UserToImport
- func (u *UserToImport) Disabled(disabled bool) *UserToImport
- func (u *UserToImport) DisplayName(displayName string) *UserToImport
- func (u *UserToImport) Email(email string) *UserToImport
- func (u *UserToImport) EmailVerified(emailVerified bool) *UserToImport
- func (u *UserToImport) Metadata(metadata *UserMetadata) *UserToImport
- func (u *UserToImport) PasswordHash(password []byte) *UserToImport
- func (u *UserToImport) PasswordSalt(salt []byte) *UserToImport
- func (u *UserToImport) PhoneNumber(phoneNumber string) *UserToImport
- func (u *UserToImport) PhotoURL(url string) *UserToImport
- func (u *UserToImport) ProviderData(providers []*UserProvider) *UserToImport
- func (u *UserToImport) UID(uid string) *UserToImport
- type UserToUpdate
- func (u *UserToUpdate) CustomClaims(claims map[string]interface{}) *UserToUpdate
- func (u *UserToUpdate) Disabled(disabled bool) *UserToUpdate
- func (u *UserToUpdate) DisplayName(name string) *UserToUpdate
- func (u *UserToUpdate) Email(email string) *UserToUpdate
- func (u *UserToUpdate) EmailVerified(verified bool) *UserToUpdate
- func (u *UserToUpdate) Password(pw string) *UserToUpdate
- func (u *UserToUpdate) PhoneNumber(phone string) *UserToUpdate
- func (u *UserToUpdate) PhotoURL(url string) *UserToUpdate
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func IsEmailAlreadyExists ¶
IsEmailAlreadyExists checks if the given error was due to a duplicate email.
func IsIDTokenRevoked ¶
IsIDTokenRevoked checks if the given error was due to a revoked ID token.
func IsInsufficientPermission ¶
IsInsufficientPermission checks if the given error was due to insufficient permissions.
func IsPhoneNumberAlreadyExists ¶
IsPhoneNumberAlreadyExists checks if the given error was due to a duplicate phone number.
func IsProjectNotFound ¶
IsProjectNotFound checks if the given error was due to a non-existing project.
func IsSessionCookieRevoked ¶
IsSessionCookieRevoked checks if the given error was due to a revoked session cookie.
func IsUIDAlreadyExists ¶
IsUIDAlreadyExists checks if the given error was due to a duplicate uid.
func IsUserNotFound ¶
IsUserNotFound checks if the given error was due to non-existing user.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client is the interface for the Firebase auth service.
Client facilitates generating custom JWT tokens for Firebase clients, and verifying ID tokens issued by Firebase backend services.
func NewClient ¶
NewClient creates a new instance of the Firebase Auth Client.
This function can only be invoked from within the SDK. Client applications should access the Auth service through firebase.App.
func (*Client) CreateUser ¶
func (c *Client) CreateUser(ctx context.Context, user *UserToCreate) (*UserRecord, error)
CreateUser creates a new user with the specified properties.
func (*Client) CustomToken ¶
CustomToken creates a signed custom authentication token with the specified user ID.
The resulting JWT can be used in a Firebase client SDK to trigger an authentication flow. See https://firebase.google.com/docs/auth/admin/create-custom-tokens#sign_in_using_custom_tokens_on_clients for more details on how to use custom tokens for client authentication.
CustomToken follows the protocol outlined below to sign the generated tokens:
- If the SDK was initialized with service account credentials, uses the private key present in the credentials to sign tokens locally.
- If a service account email was specified during initialization (via firebase.Config struct), calls the IAM service with that email to sign tokens remotely. See https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts/signBlob.
- If the code is deployed in the Google App Engine standard environment, uses the App Identity service to sign tokens. See https://cloud.google.com/appengine/docs/standard/go/reference#SignBytes.
- If the code is deployed in a different GCP-managed environment (e.g. Google Compute Engine), uses the local Metadata server to auto discover a service account email. This is used in conjunction with the IAM service to sign tokens remotely.
CustomToken returns an error the SDK fails to discover a viable mechanism for signing tokens.
func (*Client) CustomTokenWithClaims ¶
func (c *Client) CustomTokenWithClaims(ctx context.Context, uid string, devClaims map[string]interface{}) (string, error)
CustomTokenWithClaims is similar to CustomToken, but in addition to the user ID, it also encodes all the key-value pairs in the provided map as claims in the resulting JWT.
func (*Client) DeleteUser ¶
DeleteUser deletes the user by the given UID.
func (*Client) GetUserByEmail ¶
GetUserByEmail gets the user data corresponding to the specified email.
func (*Client) GetUserByPhoneNumber ¶
GetUserByPhoneNumber gets the user data corresponding to the specified user phone number.
func (*Client) ImportUsers ¶
func (c *Client) ImportUsers(ctx context.Context, users []*UserToImport, opts ...UserImportOption) (*UserImportResult, error)
ImportUsers imports an array of users to Firebase Auth.
No more than 1000 users can be imported in a single call. If at least one user specifies a password, a UserImportHash must be specified as an option.
func (*Client) RevokeRefreshTokens ¶
RevokeRefreshTokens revokes all refresh tokens issued to a user.
RevokeRefreshTokens updates the user's TokensValidAfterMillis to the current UTC second. It is important that the server on which this is called has its clock set correctly and synchronized.
While this revokes all sessions for a specified user and disables any new ID tokens for existing sessions from getting minted, existing ID tokens may remain active until their natural expiration (one hour). To verify that ID tokens are revoked, use `verifyIdTokenAndCheckRevoked(ctx, idToken)`.
func (*Client) SessionCookie ¶
func (c *Client) SessionCookie( ctx context.Context, idToken string, expiresIn time.Duration, ) (string, error)
SessionCookie creates a new Firebase session cookie from the given ID token and expiry duration. The returned JWT can be set as a server-side session cookie with a custom cookie policy. Expiry duration must be at least 5 minutes but may not exceed 14 days.
func (*Client) SetCustomUserClaims ¶
func (c *Client) SetCustomUserClaims(ctx context.Context, uid string, customClaims map[string]interface{}) error
SetCustomUserClaims sets additional claims on an existing user account.
Custom claims set via this function can be used to define user roles and privilege levels. These claims propagate to all the devices where the user is already signed in (after token expiration or when token refresh is forced), and next time the user signs in. The claims can be accessed via the user's ID token JWT. If a reserved OIDC claim is specified (sub, iat, iss, etc), an error is thrown. Claims payload must also not be larger then 1000 characters when serialized into a JSON string.
func (*Client) UpdateUser ¶
func (c *Client) UpdateUser(ctx context.Context, uid string, user *UserToUpdate) (ur *UserRecord, err error)
UpdateUser updates an existing user account with the specified properties.
DisplayName, PhotoURL and PhoneNumber will be set to "" to signify deleting them from the record.
func (*Client) Users ¶
func (c *Client) Users(ctx context.Context, nextPageToken string) *UserIterator
Users returns an iterator over Users.
If nextPageToken is empty, the iterator will start at the beginning. If the nextPageToken is not empty, the iterator starts after the token.
func (*Client) VerifyIDToken ¶
VerifyIDToken verifies the signature and payload of the provided ID token.
VerifyIDToken accepts a signed JWT token string, and verifies that it is current, issued for the correct Firebase project, and signed by the Google Firebase services in the cloud. It returns a Token containing the decoded claims in the input JWT. See https://firebase.google.com/docs/auth/admin/verify-id-tokens#retrieve_id_tokens_on_clients for more details on how to obtain an ID token in a client app.
This function does not make any RPC calls most of the time. The only time it makes an RPC call is when Google public keys need to be refreshed. These keys get cached up to 24 hours, and therefore the RPC overhead gets amortized over many invocations of this function.
This does not check whether or not the token has been revoked. Use `VerifyIDTokenAndCheckRevoked()` when a revocation check is needed.
func (*Client) VerifyIDTokenAndCheckRevoked ¶
VerifyIDTokenAndCheckRevoked verifies the provided ID token, and additionally checks that the token has not been revoked.
This function uses `VerifyIDToken()` internally to verify the ID token JWT. However, unlike `VerifyIDToken()` this function must make an RPC call to perform the revocation check. Developers are advised to take this additional overhead into consideration when including this function in an authorization flow that gets executed often.
func (*Client) VerifySessionCookie ¶
VerifySessionCookie verifies the signature and payload of the provided Firebase session cookie.
VerifySessionCookie accepts a signed JWT token string, and verifies that it is current, issued for the correct Firebase project, and signed by the Google Firebase services in the cloud. It returns a Token containing the decoded claims in the input JWT. See https://firebase.google.com/docs/auth/admin/manage-cookies for more details on how to obtain a session cookie.
This function does not make any RPC calls most of the time. The only time it makes an RPC call is when Google public keys need to be refreshed. These keys get cached up to 24 hours, and therefore the RPC overhead gets amortized over many invocations of this function.
This does not check whether or not the cookie has been revoked. Use `VerifySessionCookieAndCheckRevoked()` when a revocation check is needed.
func (*Client) VerifySessionCookieAndCheckRevoked ¶
func (c *Client) VerifySessionCookieAndCheckRevoked(ctx context.Context, sessionCookie string) (*Token, error)
VerifySessionCookieAndCheckRevoked verifies the provided session cookie, and additionally checks that the cookie has not been revoked.
This function uses `VerifySessionCookie()` internally to verify the cookie JWT. However, unlike `VerifySessionCookie()` this function must make an RPC call to perform the revocation check. Developers are advised to take this additional overhead into consideration when including this function in an authorization flow that gets executed often.
type ErrorInfo ¶
ErrorInfo represents an error encountered while importing a single user account.
The Index field corresponds to the index of the failed user in the users array that was passed to ImportUsers().
type ExportedUserRecord ¶
type ExportedUserRecord struct { *UserRecord PasswordHash string PasswordSalt string }
ExportedUserRecord is the returned user value used when listing all the users.
type Token ¶
type Token struct { Issuer string `json:"iss"` Audience string `json:"aud"` Expires int64 `json:"exp"` IssuedAt int64 `json:"iat"` Subject string `json:"sub,omitempty"` UID string `json:"uid,omitempty"` Claims map[string]interface{} `json:"-"` }
Token represents a decoded Firebase ID token.
Token provides typed accessors to the common JWT fields such as Audience (aud) and Expiry (exp). Additionally it provides a UID field, which indicates the user ID of the account to which this token belongs. Any additional JWT claims can be accessed via the Claims map of Token.
type UserImportHash ¶
type UserImportHash interface {
Config() (*internal.HashConfig, error)
}
UserImportHash represents a hash algorithm and the associated configuration that can be used to hash user passwords.
A UserImportHash must be specified in the form of a UserImportOption when importing users with passwords. See ImportUsers() and WithHash() functions.
type UserImportOption ¶
type UserImportOption interface {
// contains filtered or unexported methods
}
UserImportOption is an option for the ImportUsers() function.
func WithHash ¶
func WithHash(hash UserImportHash) UserImportOption
WithHash returns a UserImportOption that specifies a hash configuration.
type UserImportResult ¶
UserImportResult represents the result of an ImportUsers() call.
type UserInfo ¶
type UserInfo struct { DisplayName string Email string PhoneNumber string PhotoURL string // In the ProviderUserInfo[] ProviderID can be a short domain name (e.g. google.com), // or the identity of an OpenID identity provider. // In UserRecord.UserInfo it will return the constant string "firebase". ProviderID string UID string }
UserInfo is a collection of standard profile information for a user.
type UserIterator ¶
type UserIterator struct {
// contains filtered or unexported fields
}
UserIterator is an iterator over Users.
Also see: https://github.com/GoogleCloudPlatform/google-cloud-go/wiki/Iterator-Guidelines
func (*UserIterator) Next ¶
func (it *UserIterator) Next() (*ExportedUserRecord, error)
Next returns the next result. Its second return value is iterator.Done if there are no more results. Once Next returns iterator.Done, all subsequent calls will return iterator.Done.
func (*UserIterator) PageInfo ¶
func (it *UserIterator) PageInfo() *iterator.PageInfo
PageInfo supports pagination. See the google.golang.org/api/iterator package for details. Page size can be determined by the NewPager(...) function described there.
type UserMetadata ¶
UserMetadata contains additional metadata associated with a user account. Timestamps are in milliseconds since epoch.
type UserProvider ¶
type UserProvider struct { UID string ProviderID string Email string DisplayName string PhotoURL string }
UserProvider represents a user identity provider.
One or more user providers can be specified for each user when importing in bulk. See UserToImport type.
type UserRecord ¶
type UserRecord struct { *UserInfo CustomClaims map[string]interface{} Disabled bool EmailVerified bool ProviderUserInfo []*UserInfo TokensValidAfterMillis int64 // milliseconds since epoch. UserMetadata *UserMetadata }
UserRecord contains metadata associated with a Firebase user account.
type UserToCreate ¶
type UserToCreate struct {
// contains filtered or unexported fields
}
UserToCreate is the parameter struct for the CreateUser function.
func (*UserToCreate) Disabled ¶
func (u *UserToCreate) Disabled(disabled bool) *UserToCreate
Disabled setter.
func (*UserToCreate) DisplayName ¶
func (u *UserToCreate) DisplayName(name string) *UserToCreate
DisplayName setter.
func (*UserToCreate) EmailVerified ¶
func (u *UserToCreate) EmailVerified(verified bool) *UserToCreate
EmailVerified setter.
func (*UserToCreate) Password ¶
func (u *UserToCreate) Password(pw string) *UserToCreate
Password setter.
func (*UserToCreate) PhoneNumber ¶
func (u *UserToCreate) PhoneNumber(phone string) *UserToCreate
PhoneNumber setter.
func (*UserToCreate) PhotoURL ¶
func (u *UserToCreate) PhotoURL(url string) *UserToCreate
PhotoURL setter.
type UserToImport ¶
type UserToImport struct {
// contains filtered or unexported fields
}
UserToImport represents a user account that can be bulk imported into Firebase Auth.
func (*UserToImport) CustomClaims ¶
func (u *UserToImport) CustomClaims(claims map[string]interface{}) *UserToImport
CustomClaims setter.
func (*UserToImport) Disabled ¶
func (u *UserToImport) Disabled(disabled bool) *UserToImport
Disabled setter.
func (*UserToImport) DisplayName ¶
func (u *UserToImport) DisplayName(displayName string) *UserToImport
DisplayName setter.
func (*UserToImport) EmailVerified ¶
func (u *UserToImport) EmailVerified(emailVerified bool) *UserToImport
EmailVerified setter.
func (*UserToImport) Metadata ¶
func (u *UserToImport) Metadata(metadata *UserMetadata) *UserToImport
Metadata setter.
func (*UserToImport) PasswordHash ¶
func (u *UserToImport) PasswordHash(password []byte) *UserToImport
PasswordHash setter. When set a UserImportHash must be specified as an option to call ImportUsers().
func (*UserToImport) PasswordSalt ¶
func (u *UserToImport) PasswordSalt(salt []byte) *UserToImport
PasswordSalt setter.
func (*UserToImport) PhoneNumber ¶
func (u *UserToImport) PhoneNumber(phoneNumber string) *UserToImport
PhoneNumber setter.
func (*UserToImport) PhotoURL ¶
func (u *UserToImport) PhotoURL(url string) *UserToImport
PhotoURL setter.
func (*UserToImport) ProviderData ¶
func (u *UserToImport) ProviderData(providers []*UserProvider) *UserToImport
ProviderData setter.
func (*UserToImport) UID ¶
func (u *UserToImport) UID(uid string) *UserToImport
UID setter. This field is required.
type UserToUpdate ¶
type UserToUpdate struct {
// contains filtered or unexported fields
}
UserToUpdate is the parameter struct for the UpdateUser function.
func (*UserToUpdate) CustomClaims ¶
func (u *UserToUpdate) CustomClaims(claims map[string]interface{}) *UserToUpdate
CustomClaims setter.
func (*UserToUpdate) Disabled ¶
func (u *UserToUpdate) Disabled(disabled bool) *UserToUpdate
Disabled setter.
func (*UserToUpdate) DisplayName ¶
func (u *UserToUpdate) DisplayName(name string) *UserToUpdate
DisplayName setter.
func (*UserToUpdate) EmailVerified ¶
func (u *UserToUpdate) EmailVerified(verified bool) *UserToUpdate
EmailVerified setter.
func (*UserToUpdate) Password ¶
func (u *UserToUpdate) Password(pw string) *UserToUpdate
Password setter.
func (*UserToUpdate) PhoneNumber ¶
func (u *UserToUpdate) PhoneNumber(phone string) *UserToUpdate
PhoneNumber setter.
func (*UserToUpdate) PhotoURL ¶
func (u *UserToUpdate) PhotoURL(url string) *UserToUpdate
PhotoURL setter.