gitlabhq/gitlabhq — pull request #7141 by katafrakt (2014-06-17 12:21:59+00:00)
Title: Ensure that uid in OAuth is a string

In our company we use Redmine as OAuth provider (with https://github.com/suer/redmine_oauth_provider and https://github.com/suer/omniauth-redmine on GitLab side). In this case `uid` returned from Redmine is its database ID as integer. This leads to:

PG::Error: ERROR: operator does not exist: character varying = integer
LINE 1: ..."."provider" = 'redmine' AND "users"."extern_uid" = 422 ORD...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
: SELECT "users".* FROM "users" WHERE "users"."provider" = 'redmine' AND "users"."extern_uid" = 422 ORDER BY "users"."id" DESC LIMIT 1
Completed 500 Internal Server Error in 27ms

ActiveRecord::StatementInvalid (PG::Error: ERROR: operator does not exist: character varying = integer
LINE 1: ..."."provider" = 'redmine' AND "users"."extern_uid" = 422 ORD...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
: SELECT "users".* FROM "users" WHERE "users"."provider" = 'redmine' AND "users"."extern_uid" = 422 ORDER BY "users"."id" DESC LIMIT 1):
lib/gitlab/oauth/user.rb:56:in `find_by_uid_and_provider'
lib/gitlab/oauth/user.rb:14:in `find'
app/controllers/omniauth_callbacks_controller.rb:36:in `handle_omniauth'
app/controllers/omniauth_callbacks_controller.rb:4:in `block (2 levels) in '
app/controllers/application_controller.rb:59:in `set_current_user_for_thread'

Casting `uid` to string fixes this issue.