Twilio SM 两因素身份验证

Posted

技术标签:

【中文标题】Twilio SM 两因素身份验证【英文标题】:Twilio SMs Two factor authentication 【发布时间】:2017-04-14 18:18:56 【问题描述】:

我目前正在尝试在我正在使用 twilio 作为 sms 网关服务的项目中实现一个双因素身份验证系统,以请求随机登录令牌,然后将其作为文本消息发送给用户。我按照这里的教程“https://www.twilio.com/blog/2016/05/how-to-send-an-sms-from-android.html”来测试服务。按照教程,我在 Heroku 上托管了后端。该应用程序运行良好,并说短信已发送。但是我从来没有收到它。任何帮助都会很棒。

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.content.Context;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity 

 private EditText mTo;
 private EditText mBody;
 private Button mSend;
 private OkHttpClient mClient = new OkHttpClient();
 private Context mContext;

 @Override
 protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mTo = (EditText) findViewById(R.id.txtNumber);
    mBody = (EditText) findViewById(R.id.txtMessage);
    mSend = (Button) findViewById(R.id.btnSend);
    mSend.setOnClickListener(new View.OnClickListener()
        @Override
        public void onClick(View v) 
            try 
                post(" https://cryptic-shore-79857.herokuapp.com", new 
Callback()

                    @Override
                    public void onFailure(Call call, IOException e) 
                        e.printStackTrace();
                    

                    @Override
                    public void onResponse(Call call, Response response) 
 throws IOException 
                        runOnUiThread(new Runnable() 
                            @Override
                            public void run() 
                                mTo.setText("");
                                mBody.setText("");
                                Toast.makeText(getApplicationContext(),"SMS Sent!",Toast.LENGTH_SHORT).show();
                            
                        );
                    
                );
             catch (IOException e) 
                e.printStackTrace();
            
        
    );
    mContext = getApplicationContext();

Call post(String url, Callback callback) throws IOException 
    RequestBody formBody = new FormBody.Builder()
            .add("To", mTo.getText().toString())
            .add("Body", mBody.getText().toString())
            .build();
    Request request = new Request.Builder()
            .url(url)
            .post(formBody)
            .build();
    Call response = mClient.newCall(request);
    response.enqueue(callback);
    return response;


我认为连接到 Heroku 的 URL 不正确,但我不知道应该是什么。

【问题讨论】:

您是否在没有应用程序的情况下测试了后端 Heroku 应用程序以确保其正常工作?您可以使用 curl 或 Postman 发送请求。 我使用邮递员测试了有效的 get 函数,但 post 函数没有给我回复@philnash 博客文章中的应用程序只能(据我所知)与 POST 一起工作。你能分享你用来发送消息的后端代码吗? 我正在使用博客中提供的后端。我想在继续之前测试服务的功能。我只是单击了 heroku 按钮将其托管在那里。 据我所知,the app expects a POST request。当你向它发出GET 请求时,你真的收到短信了吗? 【参考方案1】:

这里是 Twilio 开发者宣传员。

POST将您的请求发送到错误的 URL。目前您的代码可以:

try 
    post("https://cryptic-shore-79857.herokuapp.com", new 
Callback()

但是发送短信的动作路径应该是:

try 
    post("https://cryptic-shore-79857.herokuapp.com/sms", new 
Callback()

注意,/sms 路径。

让我知道这是否有帮助。

【讨论】:

确实有效,我收到了“已发送短信”消息。但是我从来没有真正收到过短信。问题可能出在我的 twilio 帐户或 heroku 后端。 @philnash 您是否在 heroku 帐户中使用“测试凭据”? 我不是,我只是尝试更改我的 SID 和 Authtoken,但没有更改我从 twilio 收到的号码并且什么也没收到。我应该把电话号码改成我自己的吗? 您需要确保您使用的是 Twilio 的生产凭据。确保将 heroku 环境变量 TWILIO_NUMBER 设置为您拥有的 Twilio 号码,该号码可以发送 SMS 消息,并且您已在 Twilio 帐户中验证了您尝试向其发送消息的电话号码。 我已将 SID 和 Authtoken 更改为测试凭据,该号码是我从 twilio 收到的号码,用于向我用于创建帐户的号码发送短信。我仍然没有收到我尝试发送的短信。非常感谢您抽出宝贵的时间帮助我度过难关。

以上是关于Twilio SM 两因素身份验证的主要内容,如果未能解决你的问题,请参考以下文章

重置密码且未配置两因素设备时如何获得两因素身份验证

将远程提交推送到 github 并启用两因素身份验证

如何将ansible与两因素身份验证一起使用?

使用 Pycharm 和两因素身份验证推送到 GitHub

使用 Spring Security oauth2 进行两因素身份验证

Django 两因素身份验证