Ueberauth failed to assign %{ueberauth_auth: auth} structure for some reason

Have you checked using a catch-all clause what is actually comming into your function? Thats usually the first thing to do when debugging match-errors:

def identity_callback(conn, params) do
  IO.inspect(conn, label: :conn)
  IO.inspect(params, label: :params)
end