2010-07-21 9 views
13

Tengo varias API con las que me estoy integrando y necesito llamar en varias partes de mi aplicación.¿Cómo guardo las claves para las API en Rails?

¿Cuál es la forma de almacenar las claves, el usuario/la contraseña o la información del token, por ejemplo, un archivo de configuración y cómo puedo llamarlos para usarlos en otras partes de la aplicación?

Gracias.

Respuesta

4

Lo más fácil es almacenar la información como constantes en sus diversos archivos de entorno. De esa manera se pueden utilizar diferentes cuentas para el desarrollo, producción, etc.

# Eg 
# development/environment.rb 
.... 
API_1_USER = "user101" 
API_1_PW = "secret!" 

alternativa es crear un archivo YAML, luego leerlo cuando sus signos de aplicaciones en a una API. Este es el estilo utilizado por los carriles se suma a la config/databse.yml archivo

AÑADIDO

También puede almacenar como una constante usando un hash o resumen anidada.

# Eg 
# development/environment.rb 
.... 
API_1 = {"user" => "user101", "pw" => "secret!"} 
API_2 = {"user" => "user102", "pw" => "double_secret"} 

# or nested hashes 
API_KEYS = { 
      "api_1" => {"user" => "user101", "pw" => "secret!"}, 
      "api_2" => {"user" => "user102", "pw" => "double_secret"}} 

# using them in another file: 
foo.signin(API_1['user'], API_1['pw']) 
# or 
foo.signin(API_KEYS["api_1"]['user'], API_KEYS["api_1"]['pw']) 

# note, I use string constants instead of symbols to save vm (since the hash is 
# not referenced more than once or twice). You could also use 
# symbols as the keys, especially if the hash will be referenced often: 
API_1 = {:user => "user101", :pw => "secret!"} 
+0

Si tomo este enfoque, voto por hashes anidados, en lugar de constantes subrayadas. – Matchu

+0

¿Qué es un ejemplo de hash anidado? Y entonces, ¿cómo lo invocaría en el controlador que necesita el acceso a la API, solo como una variable ALL CAP? – Angela

+0

Agregué un ejemplo del uso de hashes como constantes –

7

Puede almacenar nombres de usuario/contraseñas e información de configuración similar en mecanismos que los rieles ya utilizan; usted puede o cosas de los datos de configuración de la derecha en sus archivos de configuración de entorno (donde production, testing y development están configurados), o se puede utilizar su propio mecanismo y:

require "yaml" 
config_hash = YAML::load_file("/path/to/your/config.yaml") 
+0

Hola, supongo que no sigo lo que config. Parece que yaml, ¿no tengo ya uno como archivo de configuración del entorno? – Angela

+0

La sugerencia es mantener su propio archivo de configuración en YAML. Hacerlo le permite separar las configuraciones específicas de su aplicación de las configuraciones de Rails. – Chris

+0

bien, veo ... ¿entonces creo mi propio yaml y pongo el código en el archivo de configuración? – Angela

0

Salida Configatron, es bastante impresionante y puede ser utilizado exactamente para este propósito.

21

sólo para mantener a esta pregunta hasta a la fecha, no es una nueva manera de hacer esto en Rails 4.1:

From the Rails guides:

Rails 4.1 genera un nuevo archivo secrets.yml en la carpeta config. De forma predeterminada, este archivo contiene la base de claves secretas de la aplicación, pero también se puede usar para almacenar otros secretos, como claves de acceso para API externas.

Cuestiones relacionadas