ヤマムギ

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時間

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

「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第2版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

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

 - Google, ProjectManagement, Redmine ,

ad

ad

  関連記事

Redmine プラグイン開発チュートリアルをやってみる

Redmine 3.0環境でプラグインを作成するチュートリアルをやってみました。 …

RedmineとGitLabを同じサーバにインストールする

Redmineでプロジェクトに設定できるGitはローカルのみ(Redmineと同 …

Redmine 3.0.0で ガントチャートの幅を変更してトラッカーを非表示にする

Redmineのガントチャートで親子チケットなど階層が深くなると肝心のチケット題 …

Redmine 3.0.0 にLocal Avatar プラグインをインストールしてユーザーがアバターを簡単に変更出来るようにする

Redmineのアバターは標準でGravater採用なのですが、エンドユーザーに …

Redmine REST APIを操作するpython_redmineを試してみた

Redmine のGUIの登録が面倒なのでコマンドで登録、更新、時間の記録が出来 …

Backlogの実績工数をAmazon QuickSightでの可視化 – 仕組み編

Backlogの実績工数をAmazon QuickSightで可視化してわかった …

Googleカレンダーの予定をV3 APIでPHPからJSONを取得してWebページに表示する

Googleカレンダーを使って管理しているライブスケジュールを日付によって、 未 …

Amzon Linux のApacheでRedmineとWordPressをバーチャルホストで共存する

EC2とRDSを節約しようと思いまして、Redmineを動かしてるとこに検証用W …

CentOS 6.5にRedmineをインストールするためにrubyをインストールする

とりあえずgitは入っている前提で [bash] # cd /opt # git …

Amazon LinuxにRedmine 環境構築(エラーと対応をそのまま記載版)

Amazon Linuxにgit + Redmineの環境を構築してみます。 自 …