Skip to content

Commit 2f1578a

Browse files
committed
Send password reset email
1 parent 5f91785 commit 2f1578a

19 files changed

Lines changed: 136 additions & 15 deletions

Appraisals

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,53 @@
11
appraise 'rails4.2-graphql1.8' do
2+
gem 'sqlite3', '~> 1.3.6'
23
gem 'bundler', '~> 1.17'
34
gem 'rails', github: 'rails/rails', branch: '4-2-stable'
45
gem 'graphql', '~> 1.8.0'
56
end
67

78
appraise 'rails5.0-graphql1.8' do
9+
gem 'sqlite3', '~> 1.3.6'
810
gem 'rails', github: 'rails/rails', branch: '5-0-stable'
911
gem 'graphql', '~> 1.8.0'
1012
gem 'devise_token_auth', '0.1.43'
1113
gem 'devise', '>= 4.0'
1214
end
1315

1416
appraise 'rails5.0-graphql1.9' do
17+
gem 'sqlite3', '~> 1.3.6'
1518
gem 'rails', github: 'rails/rails', branch: '5-0-stable'
1619
gem 'graphql', '~> 1.9.0'
1720
end
1821

1922
appraise 'rails5.1-graphql1.8' do
23+
gem 'sqlite3', '~> 1.3.6'
2024
gem 'rails', github: 'rails/rails', branch: '5-1-stable'
2125
gem 'graphql', '~> 1.8.0'
2226
gem 'devise_token_auth', '0.1.43'
2327
gem 'devise', '>= 4.3'
2428
end
2529

2630
appraise 'rails5.1-graphql1.9' do
31+
gem 'sqlite3', '~> 1.3.6'
2732
gem 'rails', github: 'rails/rails', branch: '5-1-stable'
2833
gem 'graphql', '~> 1.9.0'
2934
end
3035

3136
appraise 'rails5.2-graphql1.8' do
37+
gem 'sqlite3', '~> 1.3.6'
3238
gem 'rails', github: 'rails/rails', branch: '5-2-stable'
3339
gem 'graphql', '~> 1.8.0'
3440
gem 'devise_token_auth', '0.1.43'
3541
gem 'devise', '>= 4.4.2'
3642
end
3743

3844
appraise 'rails5.2-graphql1.9' do
45+
gem 'sqlite3', '~> 1.3.6'
3946
gem 'rails', github: 'rails/rails', branch: '5-2-stable'
4047
gem 'graphql', '~> 1.9.0'
4148
end
4249

4350
appraise 'rails_edge-graphql_edge' do
44-
gem 'sqlite3', '~> 1.4'
4551
gem 'devise_token_auth', github: 'lynndylanhurley/devise_token_auth', branch: 'master'
4652
gem 'devise', '>= 4.7'
4753
gem 'rails', github: 'rails/rails', branch: 'master'
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
module GraphqlDevise
2+
module Mutations
3+
class SendPasswordReset < Base
4+
argument :email, String, required: true, prepare: ->(email, _) { email.downcase }
5+
argument :redirect_url, String, required: true
6+
7+
def resolve(email:, redirect_url:)
8+
resource = controller.find_resource(:uid, email)
9+
10+
if resource
11+
yield resource if block_given?
12+
resource.send_reset_password_instructions(
13+
email: email,
14+
provider: 'email',
15+
redirect_url: redirect_url
16+
)
17+
18+
if resource.errors.empty?
19+
{ authenticable: resource }
20+
else
21+
raise_user_error_list(I18n.t('graphql_devise.invalid_resource'), errors: resource.errors.full_messages)
22+
end
23+
else
24+
raise_user_error(I18n.t('graphql_devise.user_not_found'))
25+
end
26+
end
27+
end
28+
end
29+
end
Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,35 @@
11
module GraphqlDevise
22
module MailerHelper
3-
def confirmation_query(resource_name)
3+
def confirmation_query(resource_name:, token:, redirect_url:)
44
name = "#{resource_name.camelize(:lower)}ConfirmAccount"
55
raw = <<-GRAPHQL
6-
query($token:String!,$redirect:String!){
7-
#{name}(confirmationToken:$token,redirectUrl:$redirect){
6+
query($token:String!,$redirectUrl:String!){
7+
#{name}(confirmationToken:$token,redirectUrl:$redirectUrl){
88
email
99
}
1010
}
1111
GRAPHQL
12-
raw.delete("\n").delete(' ')
12+
13+
{
14+
query: raw.delete("\n").delete(' ').html_safe,
15+
variables: { token: token, redirectUrl: redirect_url }
16+
}
17+
end
18+
19+
def password_reset_query(token:, redirect_url:, resource_name:)
20+
name = "#{resource_name.camelize(:lower)}CheckPasswordToken"
21+
raw = <<-GRAPHQL
22+
mutation($token:String!,$redirectUrl:String!){
23+
#{name}(resetPasswordToken:$token,redirectUrl:$redirectUrl){
24+
authenticable{ email }
25+
}
26+
}
27+
GRAPHQL
28+
29+
{
30+
query: raw.delete("\n").delete(' ').html_safe,
31+
variables: { token: token, redirectUrl: redirect_url }
32+
}
1333
end
1434
end
1535
end

app/views/devise/mailer/confirmation_instructions.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
<p><%= t '.confirm_link_msg' %> </p>
44

5-
<p><%= link_to t('.confirm_account_link'), url_for(controller: 'graphql_devise/graphql', action: :auth, query: confirmation_query(@resource.class.to_s).html_safe, variables: {token: @token, redirect: message['redirect-url']}) %></p>
5+
<p><%= link_to t('.confirm_account_link'), url_for(controller: 'graphql_devise/graphql', action: :auth, **confirmation_query(resource_name: @resource.class.to_s, redirect_url: message['redirect-url'], token: @token)) %></p>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<p><%= t(:hello).capitalize %> <%= @resource.email %>!</p>
2+
3+
<p><%= t '.request_reset_link_msg' %></p>
4+
5+
<p><%= link_to t('.password_change_link'), url_for(controller: 'graphql_devise/graphql', action: :auth, **password_reset_query(token: @token, redirect_url: message['redirect-url'], resource_name: @resource.class.to_s)) %></p>
6+
7+
<p><%= t '.ignore_mail_msg' %></p>
8+
<p><%= t '.no_changes_msg' %></p>

config/locales/en.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ en:
44
resource_build_failed: "Resource couldn't be built, execution stopped."
55
not_authenticated: "User is not logged in."
66
user_not_found: "User was not found or was not logged in."
7+
invalid_resource: "Errors present in the resource."
78
passwords:
89
update_password_error: "Unable to update user password"
910
missing_passwords: "You must fill out the fields labeled 'Password' and 'Password confirmation'."

gemfiles/rails4.2_graphql1.8.gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
source "https://rubygems.org"
44

5+
gem "sqlite3", "~> 1.3.6"
56
gem "bundler", "~> 1.17"
67
gem "rails", github: "rails/rails", branch: "4-2-stable"
78
gem "graphql", "~> 1.8.0"

gemfiles/rails5.0_graphql1.8.gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
source "https://rubygems.org"
44

5+
gem "sqlite3", "~> 1.3.6"
56
gem "rails", github: "rails/rails", branch: "5-0-stable"
67
gem "graphql", "~> 1.8.0"
78
gem "devise_token_auth", "0.1.43"

gemfiles/rails5.0_graphql1.9.gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
source "https://rubygems.org"
44

5+
gem "sqlite3", "~> 1.3.6"
56
gem "rails", github: "rails/rails", branch: "5-0-stable"
67
gem "graphql", "~> 1.9.0"
78

gemfiles/rails5.1_graphql1.8.gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
source "https://rubygems.org"
44

5+
gem "sqlite3", "~> 1.3.6"
56
gem "rails", github: "rails/rails", branch: "5-1-stable"
67
gem "graphql", "~> 1.8.0"
78
gem "devise_token_auth", "0.1.43"

0 commit comments

Comments
 (0)