ruby on Rails 中未从 Twitter 获取“omniauth-twitter”电子邮件 ID

作者:编程家 分类: ruby 时间:2025-07-04

标题:在Ruby on Rails中使用omniauth-twitter获取用户电子邮件ID

在开发Ruby on Rails应用程序时,我们经常需要集成第三方登录功能,以便用户可以使用他们喜欢的社交媒体账户来登录。本文将介绍如何在Rails应用程序中使用`omniauth-twitter` gem来实现Twitter登录,并获取用户的电子邮件地址。

### 安装和配置omniauth-twitter

首先,我们需要在Gemfile中添加`omniauth-twitter` gem,并运行`bundle install`来安装它:

ruby

# Gemfile

gem 'omniauth-twitter'

然后,在`config/initializers/omniauth.rb`文件中配置omniauth,以便使用Twitter策略:

ruby

# config/initializers/omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do

provider :twitter, 'YOUR_TWITTER_API_KEY', 'YOUR_TWITTER_API_SECRET'

end

请确保将`YOUR_TWITTER_API_KEY`和`YOUR_TWITTER_API_SECRET`替换为您在Twitter开发者平台上注册应用程序时获得的API密钥和密钥。

### 获取用户的电子邮件地址

默认情况下,Twitter OAuth不会提供用户的电子邮件地址。要获取用户的电子邮件地址,我们需要在Twitter开发者平台中申请相应权限。

1. 登录[Twitter开发者平台](https://developer.twitter.com/),进入您的应用程序的Dashboard。

2. 在左侧导航栏中选择"App settings",然后在"User token & permission"下找到"Request email address from users"选项,并将其打开。

3. 保存更改并重新生成您的API密钥和密钥。

现在,您的应用程序将能够获取用户的电子邮件地址。

### 在控制器中处理回调

在您的Rails应用程序中,您需要创建一个控制器来处理从Twitter返回的回调。

ruby

class SessionsController < ApplicationController

def create

auth = request.env['omniauth.auth']

user = User.find_or_create_by(uid: auth['uid']) do |u|

u.name = auth['info']['name']

u.email = auth['info']['email']

end

session[:user_id] = user.id

redirect_to root_path, notice: '登录成功!'

end

def destroy

session[:user_id] = nil

redirect_to root_path, notice: '已注销!'

end

end

在上面的代码中,我们首先从`request.env`中获取OAuth认证信息,然后根据用户的uid在数据库中查找或创建用户。我们将用户的id存储在会话中,并在登录后重定向到主页。

### 创建路由和视图

最后,您需要在`config/routes.rb`文件中定义相应的路由,并创建相应的视图文件来处理登录和注销功能。

ruby

# config/routes.rb

Rails.application.routes.draw do

get '/auth/:provider/callback', to: 'sessions#create'

get '/logout', to: 'sessions#destroy'

# ...

end

以上就是在Ruby on Rails中使用`omniauth-twitter`获取用户电子邮件ID的步骤。通过遵循这些步骤,您将能够实现Twitter登录并获取用户的电子邮件地址,从而为您的应用程序提供更多个性化的功能和服务。希望本文对您有所帮助!