2016-11-29 52 views
1

我收到以下錯誤,當我輸入一個電話號碼,表單字段引發ArgumentError(帳戶SID和身份驗證令牌爲必填項):

引發ArgumentError在應用:: TextyController#send_text

帳戶SID和身份驗證令牌需要

但我有身份驗證令牌並在代碼的帳戶SID。

module Messenger 
 

 
    def send_sms(number) 
 
    acct_sid = ENV['AC0b06exxxxxxxxxxxxx'] 
 
    auth_token = ENV['68ce616xxxxxxxxxxx'] 
 

 
    @client = Twilio::REST::Client.new acct_sid, auth_token 
 

 
    from = '+6466817345' 
 

 
    message = @client.account.messages.create(
 
     :from => from, 
 
     :to => '+1'+number, 
 
     :body => 'accept my application' 
 
     ) 
 
    end 
 

 
end

我使用的是較老的Ruby 2.2.0 -v和Rails 4

這是texty_controller.rb

class Apps::TextyController < ApplicationController 
 

 
    def index 
 
    @phone = Phone.new 
 
    end 
 

 
    def send_text 
 
    @phone = Phone.new(phone_params) 
 
    @phone.send_sms(@phone.clean_number) 
 
    @phone.save 
 
    redirect_to :back 
 
    end 
 

 
    private 
 

 
    def phone_params 
 
    params.require(:phone).permit(:number) 
 
    end 
 

 
end

which is a clone from the following website

回答

2

您是如何將SID和Auth令牌存儲爲環境變量的?該標準是將它們保存在一個文件application.yml並命名他們像 TWILIO_AUTH_TOKEN =「AUSHXU ******」 TWILIO_ACCOUNT_SID =「SUHXB823 *****」

,然後使用ENV打電話給他們[ 'TWILIO_AUTH_TOKEN']。

您是否曾嘗試在控制檯中調用您的環境變量?如果你得到零這意味着你沒有正確訪問它們,因此你的acct_sid和auth_token局部變量將爲零。

+0

我相信我沒有將它們存儲在application.yml文件中。我應該創建一個嗎?如果是的話,它應該放在什麼文件夾中?你也可以告訴我如何在控制檯中調用環境變量?謝謝 –

+1

如果你在你的終端裏運行命令「rails c」,你就可以直接編寫ENV ['AC0b06exxxxxxxxxxxxx'],就像你在代碼中完成的一樣。如果這返回你的Twilio賬戶SID,那麼它是正確的,如果它返回nil,這意味着它沒有找到這個環境變量。 – cdimitroulas

+1

您可以在Rails應用程序的config文件夾中創建application.yml。然後使用標準的YAML表示法可以存儲變量(例如TWILIO_AUTH_TOKEN:'************')。然後嘗試在控制檯中調用ENV ['TWILIO_AUTH_TOKEN'],並且應該返回令牌 – cdimitroulas

1

我通過執行以下步驟解決了此問題。

1)我通過節省acct_sid修改messenger.rb文件和AUTH_TOKEN方式如下:

acct_sid = 'AC0b06exxxxxxxxxxxxx'

auth_token = '68ce616xxxxxxxxxxx

2)然後保存文件後,我去端和出口從那裏得到的環境變量如下:

export TWILIO_AUTH_TOKEN=AC0b06exxxxxxxxxxxxx

export TWILIO_ACCOUNT_SID=68ce616xxxxxxxxxxx

3)在第三步中,我轉到messenger.rb文件並按以下方式修改acct_sid和auth_token。

acct_sid = ENV['TWILIO_ACCOUNT_SID']

auth_token = ENV['TWILIO_AUTH_TOKEN']

確保您使用TWILIO現場憑據。測試憑證限於three resources