Skip to content

Instantly share code, notes, and snippets.

@emmaodia
Created June 30, 2020 16:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save emmaodia/c99fc3d3faa377e197f656089409eb1f to your computer and use it in GitHub Desktop.
Save emmaodia/c99fc3d3faa377e197f656089409eb1f to your computer and use it in GitHub Desktop.
Blockstack Authentication for ReactJS Apps Using Hooks
import React, { useCallback } from 'react';
import { Switch, Route, Redirect } from 'react-router-dom';
import { Connect } from '@blockstack/connect';
import ReactBlockstack, { useBlockstack, didConnect } from 'react-blockstack';
import { appConfig } from './assets/constants';
import Layout from './Components/Layout';
import GuestBook from './Components/GuestBook';
ReactBlockstack({ appConfig });
const App = props => {
// const { showOnBoard } = props;
const { userSession } = useBlockstack();
const finished = useCallback(() => {
didConnect({ userSession });
}, [userSession]);
const authOptions = {
redirectTo: '/',
finished,
appDetails: {
name: 'BlockStack Guest Book',
icon: `${window.location.origin}/register.svg`,
},
userSession,
};
return (
<Connect authOptions={authOptions}>
<Layout>
<Switch>
<Route exact path="/guest-book" component={GuestBook}>
<Redirect to="/guest-book" />
</Route>
</Switch>
</Layout>
</Connect>
);
}
export default App;
import React from "react";
import { useBlockstack } from 'react-blockstack';
import SignIn from './SignIn'
import GuestBook from './GuestBook'
function Layout () {
const { authenticated } = useBlockstack();
return (
<div>
{authenticated ? (
<div>
<GuestBook />
</div>
) : (
<SignIn />
)}
</div>
)
}
export default Layout;
import React from 'react';
import { Link } from 'react-router-dom';
import { useConnect } from '@blockstack/connect';
const SignIn = () => {
const { doOpenAuth } = useConnect();
const onClick = () => {
doOpenAuth();
};
return (
<div>
<button onClick={onClick}>Sign In</button>
</div>
);
}
export default SignIn;
import React from 'react';
import { Link } from 'react-router-dom';
import { useBlockstack } from 'react-blockstack';
const SignIn = () => {
const { signOut } = useBlockstack();
return (
<div>
<button onClick={() => { signOut()}}>Sign In</button>
</div>
);
}
export default SignIn;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment