2014-04-29 4 views
1

J'ai essayé de laisser un utilisateur tweeter à partir de mon application rails avec le joyau omniauth-twitter et le twitter-gem et le code suivant ci-dessous mais chaque fois que je vais envoyer le tweet, je Obtenir l'erreur suivante.Erreur lors de la publication sur Twitter

“Twitter::Error::Forbidden - Your credentials do not allow access to this resource:” 

J'ai le code suivant pour la configuration de Twitter.

user.rb

def tweet(tweet) 
    client = Twitter::REST::Client.new do |config| 
    config.consumer_key  = ENV["TWITTER_CONSUMER_KEY"] 
    config.consumer_secret  = ENV["TWITTER_CONSUMER_SECRET"] 
    config.access_token  = ENV["TWITTER_ACCESS_TOKEN"] 
    config.access_token_secret = ENV["TWITTER_ACCESS_SECRET"] 
    end 

    client.update(tweet) 
end 

routes.rb

resources :tweets, only: [:new, :create] 

Je ne change rien dans mon contrôleur de sessions qui a été créé avec concevoir.

class Devise::SessionsController < DeviseController 
    prepend_before_filter :require_no_authentication, :only => [ :new, :create ] 
    prepend_before_filter :allow_params_authentication!, :only => :create 
    prepend_before_filter { request.env["devise.skip_timeout"] = true } 

# GET /resource/sign_in 
def new 
self.resource = resource_class.new(sign_in_params) 
clean_up_passwords(resource) 
respond_with(resource, serialize_options(resource)) 
respond_to do |format| 
    format.js 
end 
end 

# POST /resource/sign_in 
def create 
self.resource = warden.authenticate!(auth_options) 
set_flash_message(:notice, :signed_in) if is_navigational_format? 
sign_in(resource_name, resource) 
respond_with resource, :location => after_sign_in_path_for(resource) 
end 

# DELETE /resource/sign_out 
def destroy 
    redirect_path = after_sign_out_path_for(resource_name) 
    signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)) 
    set_flash_message :notice, :signed_out if signed_out && is_navigational_format? 

# We actually need to hardcode this as Rails default responder doesn't 
# support returning empty response on GET request 
respond_to do |format| 
    format.all { head :no_content } 
    format.any(*navigational_formats) { redirect_to redirect_path } 
end 
end 

protected 

def sign_in_params 
devise_parameter_sanitizer.sanitize(:sign_in) 
end 

def serialize_options(resource) 
methods = resource_class.authentication_keys.dup 
methods = methods.keys if methods.is_a?(Hash) 
methods << :password if resource.respond_to?(:password) 
{ :methods => methods, :only => [:password] } 
end 

def auth_options 
    { :scope => resource_name, :recall => "#{controller_path}#new" } 
end 
end 

tweets_controller.rb

class TweetsController < ApplicationController 

    def new 
    end 

    def create 
    current_user.tweet(twitter_params[:message]) 
    redirect_to root_path 
    end 

    def twitter_params 
    params.require(:tweet).permit(:message) 
    end 

    end 

Et à mon avis, je l'ai mis en place un formulaire pour un utilisateur de remplir et un bouton pour envoyer le tweet.

<p> 
    <%= form_for :tweet, url: tweets_path, method: :post do |f| %> 
    <%= f.text_field :message %> 
    <%= f.submit "Send Tweet" %> 
    <% end %> 
</p> 

MISE À JOUR: Voici mon journal du serveur

"Started POST "/tweets" for 127.0.0.1 at 2014-04-29 11:26:48 -0500 
    Processing by TweetsController#create as HTML 
    Parameters: {"utf8"=>"✓",  "authenticity_token"=>"wRGfnEqErGE3enZ2m5/cjBK5N8Ai+z/TprqI5jmsbJY=", "tweet"=> {"message"=>"Testing Tweet!"}, "commit"=>"Send Tweet"} 
    User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1 
    Completed 500 Internal Server Error in 793ms 

Twitter::Error::Forbidden - Your credentials do not allow access to this resource: 
    twitter (5.1.1) lib/twitter/rest/response/raise_error.rb:22:in `on_complete' 
    faraday (0.8.8) lib/faraday/response.rb:9:in `block in call' 
    faraday (0.8.8) lib/faraday/response.rb:63:in `on_complete' 
    faraday (0.8.8) lib/faraday/response.rb:8:in `call' 
    faraday (0.8.8) lib/faraday/request/url_encoded.rb:14:in `call' 
    faraday (0.8.8) lib/faraday/request/multipart.rb:13:in `call' 
    twitter (5.1.1) lib/twitter/rest/request/multipart_with_file.rb:15:in `call' 
    faraday (0.8.8) lib/faraday/connection.rb:253:in `run_request' 
    faraday (0.8.8) lib/faraday/connection.rb:118:in `post' 
    twitter (5.1.1) lib/twitter/rest/client.rb:131:in `request' 
    twitter (5.1.1) lib/twitter/rest/client.rb:103:in `post' 
    twitter (5.1.1) lib/twitter/rest/api/utils.rb:123:in `object_from_response' 
    twitter (5.1.1) lib/twitter/rest/api/tweets.rb:125:in `update' 
    app/models/user.rb:93:in `tweet' 
    app/controllers/tweets_controller.rb:7:in `create' 
    actionpack (4.0.2) lib/action_controller/metal/implicit_render.rb:4:in `send_action' 
    actionpack (4.0.2) lib/abstract_controller/base.rb:189:in `process_action' 
    actionpack (4.0.2) lib/action_controller/metal/rendering.rb:10:in `process_action' 
    actionpack (4.0.2) lib/abstract_controller/callbacks.rb:18:in `block in process_action' 
    activesupport (4.0.2) lib/active_support/callbacks.rb:403:in `_run__4448031954415073372__process_action__callbacks' 
    activesupport (4.0.2) lib/active_support/callbacks.rb:80:in `run_callbacks' 
    actionpack (4.0.2) lib/abstract_controller/callbacks.rb:17:in `process_action' 
    actionpack (4.0.2) lib/action_controller/metal/rescue.rb:29:in `process_action' 
    actionpack (4.0.2) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action' 
    activesupport (4.0.2) lib/active_support/notifications.rb:159:in `block in instrument' 
    activesupport (4.0.2) lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
    activesupport (4.0.2) lib/active_support/notifications.rb:159:in `instrument' 
    actionpack (4.0.2) lib/action_controller/metal/instrumentation.rb:30:in `process_action' 
    actionpack (4.0.2) lib/action_controller/metal/params_wrapper.rb:245:in `process_action' 
    activerecord (4.0.2) lib/active_record/railties/controller_runtime.rb:18:in `process_action' 
    actionpack (4.0.2) lib/abstract_controller/base.rb:136:in `process' 
    actionpack (4.0.2) lib/abstract_controller/rendering.rb:44:in `process' 
    session_off (0.5.0) lib/session_off.rb:176:in `process_with_session_off' 
    actionpack (4.0.2) lib/action_controller/metal.rb:195:in `dispatch' 
    actionpack (4.0.2) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch' 
    actionpack (4.0.2) lib/action_controller/metal.rb:231:in `block in action' 
    actionpack (4.0.2) lib/action_dispatch/routing/route_set.rb:80:in `call' 
    actionpack (4.0.2) lib/action_dispatch/routing/route_set.rb:80:in `dispatch' 
    actionpack (4.0.2) lib/action_dispatch/routing/route_set.rb:48:in `call' 
    actionpack (4.0.2) lib/action_dispatch/journey/router.rb:71:in `block in call' 
    actionpack (4.0.2) lib/action_dispatch/journey/router.rb:59:in `each' 
    actionpack (4.0.2) lib/action_dispatch/journey/router.rb:59:in `call' 
    actionpack (4.0.2) lib/action_dispatch/routing/route_set.rb:680:in `call' 
    omniauth (1.1.4) lib/omniauth/strategy.rb:184:in `call!' 
    omniauth (1.1.4) lib/omniauth/strategy.rb:164:in `call' 
    omniauth (1.1.4) lib/omniauth/strategy.rb:184:in `call!' 
    omniauth (1.1.4) lib/omniauth/strategy.rb:164:in `call' 
    rack-livereload (0.3.15) lib/rack/livereload.rb:23:in `_call' 
    rack-livereload (0.3.15) lib/rack/livereload.rb:14:in `call' 
    warden (1.2.3) lib/warden/manager.rb:35:in `block in call' 
    warden (1.2.3) lib/warden/manager.rb:34:in `catch' 
    warden (1.2.3) lib/warden/manager.rb:34:in `call' 
    rack (1.5.2) lib/rack/etag.rb:23:in `call' 
    rack (1.5.2) lib/rack/conditionalget.rb:35:in `call' 
    rack (1.5.2) lib/rack/head.rb:11:in `call' 
    actionpack (4.0.2) lib/action_dispatch/middleware/params_parser.rb:27:in `call' 
    actionpack (4.0.2) lib/action_dispatch/middleware/flash.rb:241:in `call' 
    rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context' 
    rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call' 
    actionpack (4.0.2) lib/action_dispatch/middleware/cookies.rb:486:in `call' 
    activerecord (4.0.2) lib/active_record/query_cache.rb:36:in `call' 
    activerecord (4.0.2) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in `call' 
    activerecord (4.0.2) lib/active_record/migration.rb:369:in `call' 
    actionpack (4.0.2) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call' 
    activesupport (4.0.2) lib/active_support/callbacks.rb:373:in `_run__810443810394189641__call__callbacks' 
    activesupport (4.0.2) lib/active_support/callbacks.rb:80:in `run_callbacks' 
    actionpack (4.0.2) lib/action_dispatch/middleware/callbacks.rb:27:in `call' 
    actionpack (4.0.2) lib/action_dispatch/middleware/reloader.rb:64:in `call' 
    actionpack (4.0.2) lib/action_dispatch/middleware/remote_ip.rb:76:in `call' 
    better_errors (1.1.0) lib/better_errors/middleware.rb:84:in `protected_app_call' 
    better_errors (1.1.0) lib/better_errors/middleware.rb:79:in `better_errors_call' 
    better_errors (1.1.0) lib/better_errors/middleware.rb:56:in `call' 
    airbrake (3.1.15) lib/airbrake/rails/middleware.rb:13:in `call' 
    actionpack (4.0.2) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call' 
    actionpack (4.0.2) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call' 
    railties (4.0.2) lib/rails/rack/logger.rb:38:in `call_app' 
    railties (4.0.2) lib/rails/rack/logger.rb:20:in `block in call' 
    activesupport (4.0.2) lib/active_support/tagged_logging.rb:67:in `block in tagged' 
    activesupport (4.0.2) lib/active_support/tagged_logging.rb:25:in `tagged' 
    activesupport (4.0.2) lib/active_support/tagged_logging.rb:67:in `tagged' 
    railties (4.0.2) lib/rails/rack/logger.rb:20:in `call' 
    quiet_assets (1.0.2) lib/quiet_assets.rb:18:in `call_with_quiet_assets' 
    actionpack (4.0.2) lib/action_dispatch/middleware/request_id.rb:21:in `call' 
    rack (1.5.2) lib/rack/methodoverride.rb:21:in `call' 
    rack (1.5.2) lib/rack/runtime.rb:17:in `call' 
    activesupport (4.0.2) lib/active_support/cache/strategy/local_cache.rb:83:in `call' 
    rack (1.5.2) lib/rack/lock.rb:17:in `call' 
    actionpack (4.0.2) lib/action_dispatch/middleware/static.rb:64:in `call' 
    rack (1.5.2) lib/rack/sendfile.rb:112:in `call' 
    airbrake (3.1.15) lib/airbrake/user_informer.rb:16:in `_call' 
    airbrake (3.1.15) lib/airbrake/user_informer.rb:12:in `call' 
    railties (4.0.2) lib/rails/engine.rb:511:in `call' 
    railties (4.0.2) lib/rails/application.rb:97:in `call' 
    rack (1.5.2) lib/rack/lock.rb:17:in `call' 
    rack (1.5.2) lib/rack/content_length.rb:14:in `call' 
    rack (1.5.2) lib/rack/handler/webrick.rb:60:in `service' 
    /opt/boxen/rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/webrick/httpserver.rb:138:in `service' 
    /opt/boxen/rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/webrick/httpserver.rb:94:in `run' 
    /opt/boxen/rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/webrick/server.rb:295:in `block in start_thread' 



Started POST "/__better_errors/70276081720140/variables" for 127.0.0.1 at 2014-04-29 11:26:49 -0500" 
+0

Etes-vous sûr que vos configurations dans dev.twitter.com sont configurées pour publier et non seulement lire? – user3490997

+0

Pouvez-vous partager le journal du serveur généré lorsque vous appuyez sur le bouton pour envoyer un tweet. –

+0

@ user3490997 oui, ils sont configurés pour lire et écrire l'accès – milehighcoder

Répondre

1

Je pense que vous manquez la config pour:

config.consumer_key  = ENV["TWITTER_CONSUMER_KEY"] 
config.consumer_secret  = ENV["TWITTER_CONSUMER_SECRET"] 
config.access_token  = ENV["TWITTER_ACCESS_TOKEN"] 
config.access_token_secret = ENV["TWITTER_ACCESS_SECRET"] 

Si les variables d'environnement ne sont pas positionnés vous obtiendrez l'erreur 'non autorisés'. À des fins de test, essayez d'entrer vos données à la place des ENV vars ... Cela fonctionne, cela signifie que vous avez fourni le fichier yml à tort.

+0

MERCI Tellement vous ne savez pas pourquoi je n'ai pas essayé cela en premier lieu. Excusez mon ignorance mais je ne veux évidemment pas que ces codes soient visibles par le public, comment puis-je livrer mon yml correctement – milehighcoder

+0

Essayez de trouver de la documentation sur les fichiers yml. Ou essayez de définir ce vars ENV sur votre fichier initializer.rb. Le fait est que vous ne définissez pas correctement ce vars d'environnement, donc vous obtenez l'erreur car ils sont vides. Il suffit de les définir correctement (je recommande un fichier yml qui peut être ignoré par le git et non publié) et tout ira bien. – Hamdan

+0

s'il vous plaît, envisager d'upvoting moi puisque je vous ai aidé un peu lol – Hamdan

Questions connexes