createした時だけじゃなく、見つかった時にもblock内を実行して更新してくれると勘違いしてた。
Railsのfind_or_create_byのblockはcreateした際にしか実行されない - Qiita
これと同じ。
tokenが更新されることを期待して、
def find_or_create_with_auth_hash!(auth_hash)
find_or_create_by!(uid: auth_hash.uid, provider: auth_hash.provider) do |identity|
identity.token = auth_hash.credentials.token
end
end
みたいに書いてたんだけど、
Octokit::Unauthorized: GET https://api.github.com/user: 401 - Bad credentials
が出続けてハマった…。