next-github-auth v0.2.4
Next.js auth with Github

Components and decorators for using Github authentication with Next.js

Usage
Install into your Next.js app
yarn add next-github-authCreate
sign-inandsign-outpagesAt
pages/sign-in.jsimport { SignIn } from 'next-github-auth' export default SignInAt
pages/sign-out.jsimport { SignOut } from 'next-github-auth' export default SignOutIf you need to customize the scope you can configure the
SignInpageimport { configureSignIn } from 'next-github-auth' const SignIn = configureSignIn({ scope: 'repo gist' }) export default SignInWrap private pages with
PrivatePagedecoratorAny Next.js page that should only be accessible to authenticated users should be wrapped with the
PrivatePagedecorator, e.g.:import { PrivatePage } from 'next-github-auth' const Private = props => <div>private page!</div> export default PrivatePage(Private)Wrap public pages with
PublicPagedecoratorAll other Next.js pages should be wrapped with the
PublicPagedecorator, e.g.:import { PublicPage } from 'next-github-auth' const Public = props => <div>public page!</div> export default PublicPage(Public)Optionally access the currently signed in github user and access tokens in a Next page component's
getInitialProps, e.g:import React from 'react' import PropTypes from 'prop-types' import { PrivatePage } from 'next-github-auth' const UserRepos = ({ github: { accessToken, user: { login } } }) => ( <div> {!repos.length && ( <div>cool, you have 0 repos!</div> )} {!!repos.length && ( <ul style={{ margin: 0 }}> {repos.map(({ fullName }) => ( <li key={fullName}>{fullName}</li> ))} </ul> )} </div> ) UserRepos.getInitialProps ({ github: { accessToken } }) { const githubRepos = await getGithubRepos(accessToken) const repos = githubRepos.map(repoView) return { repos } } export default PrivatePage(UserProfile)Optionally access the currently signed in github user and access tokens via React's
context, e.g:import React from 'react' import PropTypes from 'prop-types' import { PrivatePage } from 'next-github-auth' const UserProfile = (props, { github: { accessToken, user: { login } } }) => ( <div> <div>{login}'s profile</div> <div>token: {accessToken ? 'hidden' : 'not available'}</div> </div> ) UserProfile.contextTypes = { github: PropTypes.shape({ accessToken: PropTypes.string, user: PropTypes.shape({ login: PropTypes.string }) }) } export default PrivatePage(UserProfile)
Setup app environment
Add an OAuth application to your Github account to generate a client id and secret
Set the callback URL to the public URL of the deployed app
Setup environment
Export your GitHub app's client id and secret as environment variables
export GITHUB_CLIENT_ID=YOUR_APP_ID export GITHUB_CLIENT_SECRET=YOUR_APP_SECRET
Run app
Start the app
yarn dev