UeberauthGithub

Provides an Ueberauth strategy for authenticating with Github.

Setup

Create an application in Github for you to use.

Register a new application at: your github developer page and get the client_id and client_secret.

Include the provider in your configuration for Ueberauth

config :ueberauth, Ueberauth,
  providers: [
    github: [ { Ueberauth.Strategy.Github, [] } ]
  ]

Then include the configuration for github.

config :ueberauth, Ueberauth.Strategy.Github.OAuth,
  client_id: System.get_env("GITHUB_CLIENT_ID"),
  client_secret: System.get_env("GITHUB_CLIENT_SECRET")

If you haven’t already, create a pipeline and setup routes for your callback handler

pipeline :auth do
  Ueberauth.plug "/auth"
end

scope "/auth" do
  pipe_through [:browser, :auth]

  get "/:provider/callback", AuthController, :callback
end

Create an endpoint for the callback where you will handle the Ueberauth.Auth struct

defmodule MyApp.AuthController do
  use MyApp.Web, :controller

  def callback_phase(%{ assigns: %{ ueberauth_failure: fails } } = conn, _params) do
    # do things with the failure
  end

  def callback_phase(%{ assigns: %{ ueberauth_auth: auth } } = conn, params) do
    # do things with the auth
  end
end

You can edit the behaviour of the Strategy by including some options when you register your provider.

To set the uid_field

config :ueberauth, Ueberauth,
  providers: [
    github: [ { Ueberauth.Strategy.Github, [uid_field: :email] } ]
  ]

Default is :login

To set the default ‘scopes’ (permissions):

config :ueberauth, Ueberauth,
  providers: [
    github: [ { Ueberauth.Strategy.Github, [default_scope: "user,public_repo"] } ]
  ]

Deafult is “user,public_repo”

Installation

If available in Hex, the package can be installed as:

  1. Add ueber_github to your list of dependencies in mix.exs:

    def deps do
      [{:ueberauth_github, "~> 0.0.1"}]
    end