Pregunta

Después de haber visto excelente Railcast de Ryan simple OmniAuth , me las he arreglado para implementar la autenticación en mi aplicación.

Todo está trabajando muy bien, pero en mi opinión que tienen enlaces que se ven así:

<%= link_to 'Sign in with Twitter', '/signin/twitter' %>
<%= link_to 'Sign in with Facebook', '/signin/facebook' %>

Me estaba preguntando si hay una manera elegante para crear una ruta nombrado para reemplazar eso con:

<%= link_to 'Sign in with Twitter', signin_twitter_path %>
<%= link_to 'Sign in with Facebook', signin_facebook_path %>

o

<%= link_to 'Sign in with Twitter', signin_path(:twitter) %>
<%= link_to 'Sign in with Facebook', signin_path(:facebook) %>

OmniAuth ya maneja las rutas ... En mi archivo routes.rb sólo tengo cosas para las devoluciones de llamada y cierre de sesión:

match '/signin/:provider/callback' => 'sessions#create'
match '/signout' => 'sessions#destroy', :as => :signout

Así que no sé donde podría crear esas rutas con nombre.

Cualquier ayuda será apreciada. Gracias.

¿Fue útil?

Solución

Tenga en cuenta que en link_to, estas a proporcionar una cadena para el argumento de ruta. Por lo que sólo puede definir un método en un archivo ayudantes.

# application_helper.rb
module ApplicationHelper
  def signin_path(provider)
    "/auth/#{provider.to_s}"
  end
end

# view file
<%= link_to 'Sign in with Twitter', signin_path(:twitter) %>

Si desea obtener todos los meta

# application_helper.rb
module ApplicationHelper
  def method_missing(name, *args, &block)
    if /^signin_with_(\S*)$/.match(name.to_s)
      "/auth/#{$1}"
    else
     super
    end
  end
end

#view file
<%= link_to 'Sign in with Twitter', signin_with_twitter %>

Otros consejos

Agregue esto a su routes.rb

get "/auth/:provider", to: lambda{ |env| [404, {}, ["Not Found"]] }, as: :oauth

Ahora usted puede utilizar oauth_path url ayudante para generar URL.

Ej. oauth_path(:facebook) # => /auth/facebook

Con Rails 3 que puede hacer:

# routes.rb
match '/signin/:provider/callback' => 'sessions#create', :as => :signing

#view.erb
<%= link_to 'twitter', signing_path(:provider => 'twitter') %>
<%= link_to 'facebook', signing_path(:provider => 'facebook') %>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top