Meteor Apollo Accounts
A implementation of Meteor Accounts only in GraphQL with Apollo.
This package exposes Meteor Accounts functionality in GraphQL.
Installing
Install on Meteor server
meteor add cultofcoders:apollo-accounts
Initialize the package.
1import { makeExecutableSchema } from 'graphql-tools'; 2import { initAccounts } from 'meteor/nicolaslopezj:apollo-accounts'; 3import { load, getSchema } from 'graphql-load'; 4 5const { typeDefs, resolvers } = initAccounts({ 6 loginWithFacebook: false, 7 loginWithGoogle: false, 8 loginWithLinkedIn: false, 9 loginWithPassword: true, 10 overrideCreateUser: (createUser, _, args, context) { 11 // Optionally override createUser if you need custom logic 12 // Or simply restrict him from authenticating 13 } 14}); 15 16// optional 17load({ 18 typeDefs, 19 resolvers, 20}); 21 22// Gets all the resolvers and type definitions loaded in graphql-loader 23const schema = getSchema(); 24const executableSchema = makeExecutableSchema(schema);
Install on your apollo app
May or may not be the same app.
npm install --save meteor-apollo-accounts
Examples
- janikvonrotz/meteor-apollo-accounts-example: Meteor client and server side.
- orionsoft/server-boilerplate: Large Meteor server side only starter app.
Tutorials
Methods
Meteor accounts methods, client side only. All methods are promises.
loginWithPassword
Log the user in with a password.
1import { loginWithPassword } from 'meteor-apollo-accounts'; 2 3loginWithPassword({ username, email, password }, apollo);
-
username
: Optional. The user's username. -
email
: Optional. The user's email. -
password
: The user's password. The library will hash the string before it sends it to the server. -
apollo
: Apollo client instance.
changePassword
Change the current user's password. Must be logged in.
1import { changePassword } from 'meteor-apollo-accounts'; 2 3changePassword({ oldPassword, newPassword }, apollo);
-
oldPassword
: The user's current password. This is not sent in plain text over the wire. -
newPassword
: A new password for the user. This is not sent in plain text over the wire. -
apollo
: Apollo client instance.
logout
Log the user out.
1import { logout } from 'meteor-apollo-accounts'; 2 3logout(apollo);
apollo
: Apollo client instance.
createUser
Create a new user.
1import { createUser } from 'meteor-apollo-accounts'; 2 3createUser({ username, email, password, profile }, apollo);
-
username
: A unique name for this user. -
email
: The user's email address. -
password
: The user's password. This is not sent in plain text over the wire. -
profile
: The profile object based on theUserProfileInput
input type. -
apollo
: Apollo client instance.
verifyEmail
Marks the user's email address as verified. Logs the user in afterwards.
1import { verifyEmail } from 'meteor-apollo-accounts'; 2 3verifyEmail({ token }, apollo);
-
token
: The token retrieved from the verification URL. -
apollo
: Apollo client instance.
forgotPassword
Request a forgot password email.
1import { forgotPassword } from 'meteor-apollo-accounts'; 2 3forgotPassword({ email }, apollo);
-
email
: The email address to send a password reset link. -
apollo
: Apollo client instance.
resetPassword
Reset the password for a user using a token received in email. Logs the user in afterwards.
1import { resetPassword } from 'meteor-apollo-accounts'; 2 3resetPassword({ newPassword, token }, apollo);
-
newPassword
: A new password for the user. This is not sent in plain text over the wire. -
token
: The token retrieved from the reset password URL. -
apollo
: Apollo client instance.
loginWithFacebook
Logins the user with a facebook accessToken
1import { loginWithFacebook } from 'meteor-apollo-accounts'; 2 3loginWithFacebook({ accessToken }, apollo);
-
accessToken
: A Facebook accessToken. It's recommended to use https://github.com/keppelen/react-facebook-login to fetch the accessToken. -
apollo
: Apollo client instance.
loginWithGoogle
Logins the user with a google accessToken
1import { loginWithGoogle } from 'meteor-apollo-accounts'; 2 3loginWithGoogle({ accessToken }, apollo);
-
accessToken
: A Google accessToken. It's recommended to use https://github.com/anthonyjgrove/react-google-login to fetch the accessToken. -
apollo
: Apollo client instance.
onTokenChange
Register a function to be called when a user is logged in or out.
1import { onTokenChange } from 'meteor-apollo-accounts'; 2 3onTokenChange(function() { 4 console.log('token did change'); 5 apollo.resetStore(); 6});
userId
Returns the id of the logged in user.
1import { userId } from 'meteor-apollo-accounts' 2 3async function () { 4 console.log('The user id is:', await userId()) 5}
React-Native usage
1//First you'll need to import the Storage library that you'll use to store the user details (userId, tokens...), 2// AsyncStorage is highly recommended. 3 4import { 5 ... 6 AsyncStorage 7} from 'react-native'; 8 9import { loginWithPassword, userId, setTokenStore} from 'meteor-apollo-accounts' 10 11// Then you'll have to define a TokenStore for your user data using setTokenStore 12// (for instance when your component is mounted): 13setTokenStore({ 14 set: async function ({userId, token, tokenExpires}) { 15 await AsyncStorage.setItem('Meteor.userId', userId) 16 await AsyncStorage.setItem('Meteor.loginToken', token) 17 // AsyncStorage doesn't support Date type so we'll store it as a String 18 await AsyncStorage.setItem('Meteor.loginTokenExpires', tokenExpires.toString()) 19 }, 20 get: async function () { 21 return { 22 userId: await AsyncStorage.getItem('Meteor.userId'), 23 token: await AsyncStorage.getItem('Meteor.loginToken'), 24 tokenExpires: await AsyncStorage.getItem('Meteor.loginTokenExpires') 25 } 26 } 27}) 28 29// Finally, you'll be able to use asynchronously any method from the library: 30async login (event) { 31 event.preventDefault(); 32 33 try { 34 const id_ = await loginWithPassword({ "email", "password" }, this.client) 35 this.client.resetStore() 36 } catch (error) { 37 38 } 39}