Authenticate users with their Google account

Yt::Auth lets you easily authenticate users of your website by means of their Google-based email address.

With Yt::Auth, it is easy to limit access to your app to a few users without the need for them to create a username and password.

The source code is available on GitHub and the documentation on RubyDoc.

Build Status Coverage Status Dependency Status Code Climate Online docs Gem Version

Yt::Auth.url_for

With the url_for class method, you can obtain a URL where to redirect users who need to authenticate with their Google account in order to use your application:

redirect_uri = 'https://example.com/auth' # REPLACE WITH REAL ONE
scope = %i(yt-analytics.readonly youtube)
Yt::Auth.url_for(redirect_uri: redirect_uri, scope: scope, force: true)
 # => https://accounts.google.com/o/oauth2/auth?client_id=...&scope=email&redirect_uri=https%3A%2F%2Fexample.com%2Fauth&response_type=code

Yt::Auth.create

After users have authenticated with their Google account, they will be redirected to the redirect_uri you indicated, with an extra code query parameter, e.g. https://example.com/auth?code=1234

With the create class method, you can create an instance for that authentication:

redirect_uri = 'https://example.com/auth' # REPLACE WITH REAL ONE
code = 'dfwe7r9djd234ffdjf3009dfknfd98re' # REPLACE WITH REAL ONE
auth = Yt::Auth.create(redirect_uri: redirect_uri, code: code)
 # => #<Yt::Auth:0x007fe61d…>

Yt::Auth#email

Once you have an instance of Yt::Auth, you can obtain the verified email of the authenticated user:

auth.email
 # => "[email protected]"

Yt::Auth#access_token

Once you have an instance of Yt::Auth, you can also obtain the access token of the authenticated user:

auth.access_token
 # => "ya29.df8er8e9r89er"

Yt::Auth#refresh_token

Once you have an instance of Yt::Auth, you can also obtain the refresh token of the authenticated user:

auth.refresh_token
 # => "sdf7f7erre98df"

Yt::Auth.find_by

If you already know the refresh token of a Google account, you can obtain its complete authentication object:

auth = Auth.find_by(refresh_token: "sdf7f7erre98df")
auth.email
 # => "[email protected]"

Yt::HTTPError

Yt::HTTPError will be raised whenever something goes wrong during the authentication process. The message of the error will include the details:

redirect_uri = 'https://example.com/auth' # REPLACE WITH REAL ONE
code = 'this-is-not-a-valid-code'
Yt::Auth.new(redirect_uri: redirect_uri, code: code).email
 # => Yt::HTTPError: Invalid authorization code.

How to contribute

Contribute to the code by forking the project, adding the missing code, writing the appropriate tests and submitting a pull request.

In order for a PR to be approved, all the tests need to pass and all the public methods need to be documented and listed in the guides. Remember:

  • to run all tests locally: bundle exec rspec
  • to generate the docs locally: bundle exec yard
  • to list undocumented methods: bundle exec yard stats --list-undoc