From 0cb9065dba024e67f95a7df4cc5bea09bc74ef66 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Tue, 10 Dec 2019 18:43:46 -0800 Subject: [PATCH] In progress changes for ensuring that new clients are written to the database. --- client/src/App/App.container.jsx.bak | 78 ------------------- client/src/App/App.js | 7 -- .../sign-in-form/sign-in-form.component.jsx | 20 ++++- .../sign-in-form/sign-in-form.container.jsx | 13 ++++ .../sign-out/sign-out.component.jsx | 4 +- client/src/graphql/user.queries.js | 2 +- client/src/pages/sign-in/sign-in.page.jsx | 4 +- .../down.yaml | 6 ++ .../up.yaml | 14 ++++ .../down.yaml | 19 +++++ .../up.yaml | 21 +++++ 11 files changed, 97 insertions(+), 91 deletions(-) delete mode 100644 client/src/App/App.container.jsx.bak create mode 100644 client/src/components/sign-in-form/sign-in-form.container.jsx create mode 100644 hasura/migrations/1576029072284_update_permission_user_public_table_users/down.yaml create mode 100644 hasura/migrations/1576029072284_update_permission_user_public_table_users/up.yaml create mode 100644 hasura/migrations/1576029179533_update_permission_user_public_table_users/down.yaml create mode 100644 hasura/migrations/1576029179533_update_permission_user_public_table_users/up.yaml diff --git a/client/src/App/App.container.jsx.bak b/client/src/App/App.container.jsx.bak deleted file mode 100644 index 50aa92e44..000000000 --- a/client/src/App/App.container.jsx.bak +++ /dev/null @@ -1,78 +0,0 @@ -//Baselined on https://blog.hasura.io/authentication-and-authorization-using-hasura-and-firebase/ - -import React, { useState, useEffect } from "react"; -import firebase from "../firebase/firebase.utils"; -import App from "./App"; - -import { gql } from "apollo-boost"; -import { HttpLink } from "apollo-link-http"; -import ApolloClient from "apollo-client"; -import { InMemoryCache } from "apollo-cache-inmemory"; - -import Spin from "../components/loading-spinner/loading-spinner.component"; - -const UPSERT_USER = gql` - mutation upsert_user($authEmail: String!, $authToken: String!) { - insert_users( - objects: [{ email: $authEmail, authid: $authToken }] - on_conflict: { constraint: users_pkey, update_columns: [authid] } - ) { - returning { - authid - } - } - } -`; - -export default function Auth() { - const [authState, setAuthState] = useState({ status: "loading" }); - - useEffect(() => { - return firebase.auth().onAuthStateChanged(async user => { - if (user) { - console.log("Current User:", user); - - client - .mutate({ - mutation: UPSERT_USER, - variables: { authEmail: user.email, authToken: user.uid } - }) - .then(r => console.log("Successful Upsert", r)) - .catch(error => console.log("Upsert error!!!!", error)); - - const token = await user.getIdToken(); - const idTokenResult = await user.getIdTokenResult(); - const hasuraClaim = - idTokenResult.claims["https://hasura.io/jwt/claims"]; - if (hasuraClaim) { - setAuthState({ status: "in", user, token }); - } else { - // Check if refresh is required. - const metadataRef = firebase - .database() - .ref("metadata/" + user.uid + "/refreshTime"); - metadataRef.on("value", async () => { - // Force refresh to pick up the latest custom claims changes. - const token = await user.getIdToken(true); - setAuthState({ status: "in", user, token }); - }); - } - } else { - setAuthState({ status: "out" }); - } - }); - }, []); - - let content; - if (authState.status === "loading") { - content = ; - } else { - content = ( - <> - - - ); - } - - return
{content}
; -} diff --git a/client/src/App/App.js b/client/src/App/App.js index 07261d605..ab5968bb8 100644 --- a/client/src/App/App.js +++ b/client/src/App/App.js @@ -22,13 +22,6 @@ class App extends React.Component { this.unsubscribeFromAuth = auth.onAuthStateChanged(async user => { console.log("Current User:", user); if (user) { - // client - // .mutate({ - // mutation: UPSERT_USER, - // variables: { authEmail: user.email, authToken: user.uid } - // }) - // .then(r => console.log("Successful Upsert", r)) - // .catch(error => console.log("Upsert error!!!!", error)); const token = await user.getIdToken(); const idTokenResult = await user.getIdTokenResult(); diff --git a/client/src/components/sign-in-form/sign-in-form.component.jsx b/client/src/components/sign-in-form/sign-in-form.component.jsx index 393f3a875..c1bf32ec1 100644 --- a/client/src/components/sign-in-form/sign-in-form.component.jsx +++ b/client/src/components/sign-in-form/sign-in-form.component.jsx @@ -2,6 +2,7 @@ import React from "react"; import { auth } from "../../firebase/firebase.utils"; import { Form, Icon, Input, Button, Alert } from "antd"; +import { UPSERT_USER } from "../../graphql/user.queries"; class SignInForm extends React.Component { constructor() { super(); @@ -12,11 +13,27 @@ class SignInForm extends React.Component { handleSubmit = e => { e.preventDefault(); + const { apolloClient } = this.props; + this.props.form.validateFields(async (err, values) => { if (!err) { const { email, password } = values; try { - await auth.signInWithEmailAndPassword(email, password); + const { user } = await auth.signInWithEmailAndPassword( + email, + password + ); + + apolloClient + .mutate({ + mutation: UPSERT_USER, + variables: { authEmail: user.email, authToken: user.uid } + }) + .then(r => console.log("Successful Upsert", r)) + .catch(error => { + console.log("Upsert error!!!!", error); + }); + this.props.form.resetFields(); } catch (error) { this.setState({ ...this.state, errorMessage: error.message }); @@ -28,6 +45,7 @@ class SignInForm extends React.Component { render() { const { getFieldDecorator } = this.props.form; const { errorMessage } = this.state; + return (
diff --git a/client/src/components/sign-in-form/sign-in-form.container.jsx b/client/src/components/sign-in-form/sign-in-form.container.jsx new file mode 100644 index 000000000..a177606e3 --- /dev/null +++ b/client/src/components/sign-in-form/sign-in-form.container.jsx @@ -0,0 +1,13 @@ +import React from "react"; +import { ApolloConsumer } from "react-apollo"; +import SignInFormComponent from "./sign-in-form.component"; + +export default function SignInFormContainer() { + return ( + + {client => { + return ; + }} + + ); +} diff --git a/client/src/components/sign-out/sign-out.component.jsx b/client/src/components/sign-out/sign-out.component.jsx index a9ab53f81..9bb3627d0 100644 --- a/client/src/components/sign-out/sign-out.component.jsx +++ b/client/src/components/sign-out/sign-out.component.jsx @@ -1,11 +1,11 @@ import React from "react"; import firebase from "../../firebase/firebase.utils"; -export default function SignOut() { +export default function SignOut({ match }) { const signOut = async () => { try { await firebase.auth().signOut(); - console.log("Signin out!"); + console.log("match", match); } catch (error) { console.log(error); } diff --git a/client/src/graphql/user.queries.js b/client/src/graphql/user.queries.js index 8b697ec52..dd7af55d3 100644 --- a/client/src/graphql/user.queries.js +++ b/client/src/graphql/user.queries.js @@ -6,7 +6,7 @@ export const UPSERT_USER = gql` objects: [{ email: $authEmail, authid: $authToken }] on_conflict: { constraint: users_pkey, update_columns: [authid] } ) { - returning { + data { authid } } diff --git a/client/src/pages/sign-in/sign-in.page.jsx b/client/src/pages/sign-in/sign-in.page.jsx index a1f8c202c..2de375129 100644 --- a/client/src/pages/sign-in/sign-in.page.jsx +++ b/client/src/pages/sign-in/sign-in.page.jsx @@ -1,6 +1,6 @@ import React from "react"; -import SignInComponent from "../../components/sign-in-form/sign-in-form.component"; +import SignInContainer from "../../components/sign-in-form/sign-in-form.container"; export default () => { - return ; + return ; }; diff --git a/hasura/migrations/1576029072284_update_permission_user_public_table_users/down.yaml b/hasura/migrations/1576029072284_update_permission_user_public_table_users/down.yaml new file mode 100644 index 000000000..5022ed879 --- /dev/null +++ b/hasura/migrations/1576029072284_update_permission_user_public_table_users/down.yaml @@ -0,0 +1,6 @@ +- args: + role: user + table: + name: users + schema: public + type: drop_insert_permission diff --git a/hasura/migrations/1576029072284_update_permission_user_public_table_users/up.yaml b/hasura/migrations/1576029072284_update_permission_user_public_table_users/up.yaml new file mode 100644 index 000000000..abd3f4a2f --- /dev/null +++ b/hasura/migrations/1576029072284_update_permission_user_public_table_users/up.yaml @@ -0,0 +1,14 @@ +- args: + permission: + allow_upsert: true + check: {} + columns: [] + localPresets: + - key: "" + value: "" + set: {} + role: user + table: + name: users + schema: public + type: create_insert_permission diff --git a/hasura/migrations/1576029179533_update_permission_user_public_table_users/down.yaml b/hasura/migrations/1576029179533_update_permission_user_public_table_users/down.yaml new file mode 100644 index 000000000..c5e1a383e --- /dev/null +++ b/hasura/migrations/1576029179533_update_permission_user_public_table_users/down.yaml @@ -0,0 +1,19 @@ +- args: + role: user + table: + name: users + schema: public + type: drop_insert_permission +- args: + permission: + check: {} + columns: [] + localPresets: + - key: "" + value: "" + set: {} + role: user + table: + name: users + schema: public + type: create_insert_permission diff --git a/hasura/migrations/1576029179533_update_permission_user_public_table_users/up.yaml b/hasura/migrations/1576029179533_update_permission_user_public_table_users/up.yaml new file mode 100644 index 000000000..4e6739f81 --- /dev/null +++ b/hasura/migrations/1576029179533_update_permission_user_public_table_users/up.yaml @@ -0,0 +1,21 @@ +- args: + role: user + table: + name: users + schema: public + type: drop_insert_permission +- args: + permission: + check: {} + columns: + - authid + - email + localPresets: + - key: "" + value: "" + set: {} + role: user + table: + name: users + schema: public + type: create_insert_permission