Class: SnfCore::AuthController

Inherits:
ApplicationController show all
Defined in:
app/controllers/snf_core/auth_controller.rb

Instance Method Summary collapse

Instance Method Details

#loginObject



73
74
75
76
77
78
79
80
81
82
83
# File 'app/controllers/snf_core/auth_controller.rb', line 73

def 
  user = User.find_by(phone_number: auth_params[:phone_number])
  return render json: { success: false, error: "User doesn't exist" }, status: :unauthorized unless user
  return render json: { success: false, error: "Invalid email or password" }, status: :unauthorized unless user.authenticate(auth_params[:password])
  user_role = UserRole.find_by(user: user)
  return render json: { success: false, error: "No role was assigned to your user" }, status: :unauthorized unless user_role

  role = Role.find(user_role.role_id)
  token = @token_service.encode({ user: user.as_json.except("password_digest", "created_at", "updated_at"), role: role.name })
  render json: { success: true, token: token, user: user.as_json(except: [ :password_digest ]), role: role.name }
end

#signupObject



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'app/controllers/snf_core/auth_controller.rb', line 29

def 
  ActiveRecord::Base.transaction do
    @address = Address.new(address_params)

    if @address.save
      @user = User.new(user_params)
      @user.address = @address

      if @user.save
        # Assign default user role
        user_role = Role.find_by(name: "User")
        UserRole.create!(user: @user, role: user_role)

        @business = Business.new(
          user: @user,
          business_name: [:business_name],
          tin_number: [:tin_number],
          business_type: [:business_type]
        )

        if @business.save
          render json: {
            success: true,
            user: @user.as_json(except: [ :password_digest ]),
            business: @business,
            address: @address
          }, status: :created
          return
        else
          render json: { errors: @business.errors.full_messages }, status: :unprocessable_entity
          raise ActiveRecord::Rollback
        end
      else
        render json: { errors: @user.errors.full_messages }, status: :unprocessable_entity
        raise ActiveRecord::Rollback
      end
    else
      render json: { errors: @address.errors.full_messages }, status: :unprocessable_entity
      raise ActiveRecord::Rollback
    end
  end
end

#validate_tokenObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'app/controllers/snf_core/auth_controller.rb', line 5

def validate_token
  token = params[:token]
  return render json: { valid: false }, status: :unauthorized unless token

  begin
    payload = @token_service.decode(token)
    user = User.find_by(id: payload["user"]["id"])

    if user
      user_role = UserRole.find_by(user: user)
      role = Role.find(user_role.role_id)
      render json: {
        valid: true,
        user: user.as_json(except: [ :password_digest ]),
        role: role.name
      }
    else
      render json: { valid: false }, status: :unauthorized
    end
  rescue JWT::DecodeError => e
    render json: { valid: false, error: "Invalid token" }, status: :unauthorized
  end
end