@@ -9,6 +9,13 @@ defmodule OAuth2Example.AuthController do
9
9
redirect conn , external: authorize_url! ( provider )
10
10
end
11
11
12
+ def delete ( conn , _params ) do
13
+ conn
14
+ |> put_flash ( :info , "You have been logged out!" )
15
+ |> configure_session ( drop: true )
16
+ |> redirect ( to: "/" )
17
+ end
18
+
12
19
@ doc """
13
20
This action is reached via `/auth/:provider/callback` is the the callback URL that
14
21
the OAuth2 provider will redirect the user back to with a `code` that will
@@ -20,7 +27,7 @@ defmodule OAuth2Example.AuthController do
20
27
token = get_token! ( provider , code )
21
28
22
29
# Request the user's data with the access token
23
- user = get_user! ( provider , token ) . body
30
+ user = get_user! ( provider , token )
24
31
25
32
# Store the user in the session under `:current_user` and redirect to /.
26
33
# In most cases, we'd probably just store the user's ID that can be used
@@ -35,15 +42,26 @@ defmodule OAuth2Example.AuthController do
35
42
|> redirect ( to: "/" )
36
43
end
37
44
38
- defp authorize_url! ( "github" ) , do: GitHub . authorize_url!
39
- defp authorize_url! ( "google" ) , do: Google . authorize_url! ( scope: "https://www.googleapis.com/auth/userinfo.email" )
45
+ defp authorize_url! ( "github" ) , do: GitHub . authorize_url!
46
+ defp authorize_url! ( "google" ) , do: Google . authorize_url! ( scope: "https://www.googleapis.com/auth/userinfo.email" )
47
+ defp authorize_url! ( "facebook" ) , do: Facebook . authorize_url! ( scope: "user_photos" )
40
48
defp authorize_url! ( _ ) , do: raise "No matching provider available"
41
49
42
- defp get_token! ( "github" , code ) , do: GitHub . get_token! ( code: code )
43
- defp get_token! ( "google" , code ) , do: Google . get_token! ( code: code )
50
+ defp get_token! ( "github" , code ) , do: GitHub . get_token! ( code: code )
51
+ defp get_token! ( "google" , code ) , do: Google . get_token! ( code: code )
52
+ defp get_token! ( "facebook" , code ) , do: Facebook . get_token! ( code: code )
44
53
defp get_token! ( _ , _ ) , do: raise "No matching provider available"
45
54
46
- defp get_user! ( "github" , token ) , do: OAuth2.AccessToken . get! ( token , "/user" )
47
- defp get_user! ( "google" , token ) , do: OAuth2.AccessToken . get! ( token , "https://www.googleapis.com/plus/v1/people/me/openIdConnect" )
55
+ defp get_user! ( "github" , token ) do
56
+ { :ok , % { body: user } } = OAuth2.AccessToken . get ( token , "/user" )
57
+ % { name: user [ "name" ] , avatar: user [ "avatar_url" ] }
58
+ end
59
+ defp get_user! ( "google" , token ) do
60
+ { :ok , % { body: user } } = OAuth2.AccessToken . get ( token , "https://www.googleapis.com/plus/v1/people/me/openIdConnect" )
61
+ % { name: user [ "name" ] , avatar: user [ "picture" ] }
62
+ end
63
+ defp get_user! ( "facebook" , token ) do
64
+ { :ok , % { body: user } } = OAuth2.AccessToken . get ( token , "/me" , fields: "id,name" )
65
+ % { name: user [ "name" ] , avatar: "https://graph.facebook.com/#{ user [ "id" ] } /picture" }
66
+ end
48
67
end
49
-
0 commit comments