react-airlock v0.0.4
react-airlock - React components for Laravel Airlock
⚠️ This is very much a work in progress.
The react-airlock package aims to provide an easy way to authenticate your React application with Laravel Airlock.
Usage
Install from NPM
npm i react-airlockWrap your application in an <Airlock> component
Example:
import React from "react";
import { Airlock } from "react-airlock";
const airlockConfig = {
  api_url: "http://foobar.test",
  csrf_cookie_route: "airlock/csrf-cookie",
  login_route: "login",
  logout_route: "logout",
  user_object_route: "api/user"
};
const App = () => (
  <div class="my-application">
    <Airlock config={airlockConfig}>// Your application code</Airlock>
  </div>
);You can then use the withAirlock higher-order component to get authentication status, user data and airlock related methods in any component.
import React from "react";
import { Airlock } from "react-airlock";
const LoginButton = ({ authenticated, user, signIn }) => {
  const handleLogin = () => {
    const email = "airlock@example.org";
    const password = "example";
    signIn(email, password)
      .then(() => window.alert("Signed in!"))
      .catch(() => window.alert("Incorrect email or password"));
  };
  if (authenticated === true) {
    return <h1>Welcome, {user.name}</h1>;
  } else {
    return <Button onClick={handleLogin}>Sign in</Button>;
  }
};
export default withAirlock(LoginButton);You can also directly consume the Airlock context by importing AirlockContext.
Both the AirlockContext and the withAirlock HOC give you access to the following data and methods:
| | Description |
|---------------------|-----------------------------------------------------------------------------------------------------|
| user | Object your API returns with user data |
| authenticated | Boolean, or null if authentication has not yet been checked |
| signIn | Accepts (email, password), returns a promise. |
| signOut | Returns a promise |
| checkAuthentication | Returns the authentication status. If it's null, it will ask the server and update authenticated. |
Setup
All URLS in the config are required. These need to be created in your Laravel app.
const airlockConfig = {
  // Your applications URL
  api_url: "http://foobar.test",
  // The following settings are URLS that need to be created in your Laravel application
  // The URL airlock uses for the csrf cookie
  csrf_cookie_route: "airlock/csrf-cookie",
  // Email and password get POSTed to here
  signin_route: "login",
  // A POST request is sent to this route to sign the user out
  signout_route: "logout",
  // Used for checking if the user is signed in (so this should be protected)
  // The returned object will be avaiable as `user` in the React components.
  user_object_route: "api/user"
};react-airlock automatically checks if the user is signed in when the the <Airlock> component gets mounted. If you don't want this, and want to manually use the checkAuthentication function later, set checkOnInit to false like so:
<Airlock config={airlockConfig} checkOnInit={true}>