ヤマムギ

growing hard days.

*

redmine_omniauth_googleプラグインをRedmine3.0.0で動くようにする

   


Redmine-Logo-CyberSprocket-Composite-300x300-png8 copy

redmine_omniauth_googleプラグインをインストールしたところ、エラーが発生。
Redmine3.0.0には対応していないらしい。
なので、Rubyの経験はなかったのですが、基礎は調べて対応してみました。
おかしなところは指摘してもらえたら嬉しいです。

修正後のプラグイン

元のプラグインをForkして修正しました。
https://github.com/yamamanx/redmine_omniauth_google

発生したエラー

app/controllers/redmine_oauth_controller.rb

[ruby]
user = User.find_or_initialize_by_mail(info[“email”])
[/ruby]

上記のコードが「undefined method」で怒られるので最初はfind_or_initialize(email)にしたら「Unknown column ‘users.email’ in ‘where clause’:」となった。

Redmine3.0.0の新機能

  • 検索機能の改善 (高速化、未完了チケットのみ検索するオプション、添付ファイル名の検索)
  • トラッカーごとのデフォルトステータスの指定
  • ユーザーに複数のメールアドレスを登録
  • 添付ファイルの説明欄の編集
  • Rails 4.2 / Ruby 2.2 のサポート

主な機能は上記のとおりなので、「複数のメールアドレス登録」がひっかかってしまったのだろうと思いました。

コードの修正箇所

元のコード

app/controllers/redmine_oauth_controller.rb

[ruby]
user = User.find_or_initialize_by_mail(info[“email”])
if user.new_record?
# Self-registration off
redirect_to(home_url) && return unless Setting.self_registration?
# Create on the fly
user.firstname, user.lastname = info[“name”].split(‘ ‘) unless info[‘name’].nil?
user.firstname ||= info[:given_name]
user.lastname ||= info[:family_name]
user.mail = info[“email”]
user.login = parse_email(info[“email”])[:login]
user.login ||= [user.firstname, user.lastname]*”.”
user.random_password
user.register
[/ruby]

修正方法

すでにユーザーが登録済かどうかをチェックするのに、メールアドレスを使用しているのを変えなければならない。
ログインIDをキーにすればいいのですが、ログインIDはメールアドレスのアカウント部分か、それが取れなければユーザ名になっている。
かつ、ユーザ名はユーザ名を半角スペースで分割したものか、取れなければ姓、名で対応している。
これらをUserオブジェクト生成前に持ってくればいいのだろうと思いました。

修正後のコード

app/controllers/redmine_oauth_controller.rb

[ruby]
userFirstName,userLastName = info[“name”].split(‘ ‘) unless info[‘name’].nil?
userFirstName ||= info[:given_name]
userLastName ||= info[:family_name]
userLoginName = parse_email(info[“email”])[:login]
userLoginName ||= [userFirstName, userLastName]*”.”;
user = User.find_or_initialize_by(login: userLoginName)
if user.new_record?
# Self-registration off
redirect_to(home_url) && return unless Setting.self_registration?
# Create on the fly
user.firstname = userFirstName
user.lastname = userLastName
user.login = userLoginName
user.mail = info[“email”]
user.random_password
user.register
[/ruby]

もしかしたら「user.mail = info[“email”]」がひっかかるかと思ったのですが、これはカラムではなくてRedmineのユーザ登録画面のデフォルト値の設定だけのようなので、問題なかったです。

Redmine 認証設定値

redmine-auth-setting

  • 認証が必要
  • 自動ログイン : 1日
  • メールでアカウントを有効化
  • パスワードの最低文字数 : 8
  • 追加メールアドレスの上限 : 5
  • 有効期間の最大値 : 1日
  • 無操作タイムアウト : 4時間

最後までお読みいただきましてありがとうございました!

【PR】 「AWS認定試験対策 AWS クラウドプラクティショナー」という本を書きました。

【PR】 「AWSではじめるLinux入門ガイド」という本を書きました。

【PR】 「ポケットスタディ AWS認定 デベロッパーアソシエイト」という本を書きました。

 - Google, ProjectManagement, Redmine ,

ad

ad

  関連記事

Redmine3.0.0に CSV Importerプラグインをインストールする

バグ管理や開発の現場だけではなく進捗管理などにも重宝出来るRedmine。 その …

ライブ配信カレンダーの設定まわり

ライブ配信のカレンダーをGoogle Apps Scriptとかで作りましたの設 …

共有Googleカレンダーを自分のカレンダーに追加してiPhoneに同期する

配信ライブカレンダーという共有カレンダーを作りました。 このようなGoogleの …

GoogleAppsScriptを使ってGmailをSpreadSheetにエクスポートする

GoogleAppsScriptを使ってGmailをSpreadSheetにエク …

RedmineにEasy Gantt プラグインをインストールしようとしたらRubyのバージョンが古いという事にひっかかったのでRubyもアップグレードした

RedmineにEasy Ganttプラグインをインストールしました。 標準のガ …

自転車でナビ+記録出来るアプリ+ホルダー+バッテリー試してみた

目的 記録を蓄積して振り返りやる気を継続する 飽きないように単調にならないように …

Redmineの作業時間、予定工数をSQLで抽出

プラグインとかでやればいいのかもなのですが、可視化はダッシュボードツールとかBI …

Backlogの課題チケット更新内容をMicrosoft Teamsに通知する(AWS Lambda Python)

BacklogにSlack連携が追加されました。 ですが、私の所属している会社で …

SourceTreeからgitサーバへSSHを使ってプッシュする

SSH URI gitのパスは/var/git/pj.gitとします。 [pla …

Googleナレッジパネルの認証を受けるために申請してみた

Googleでエゴサーチしていると、ナレッジパネルなるものがあることに気づきまし …