No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Los secretos de Rails

10/36
Recursos

Aportes 11

Preguntas 4

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Ahora Rails 6 podemos agregar credenciales para m煤ltiples entornos y en cada uno se encontraran sus propias claves de cifrado.
_
Credenciales globales

Para cualquier entorno, Rails detecta autom谩ticamente qu茅 conjunto de credenciales utilizar.聽Las credenciales espec铆ficas del entorno tendr谩n prioridad sobre las credenciales globales.聽De no encontrarse credenciales espec铆ficas del entorno Rails utilizar谩 las credenciales globales y la clave maestra que est谩n representadas por los siguientes archivos:

  • config/credentials.yml.enc
  • config/master.key (Archivo a compartir con nuestro equipo)
    _
    Cree credenciales espesifico (producci贸n)

Ejecutaremos el siguiente comando:

 EDITOR=nano rails credentials:edit --environment production

Este comando abrir谩 el editor de texto seleccionado y nos permitir谩 crear las credenciales (formato, clave - valor) que consideremos necesarios, ademas nos creara los siguientes archivos

  • config/credentials/production.key (Archivo a compartir con el equipo que tenga acceso al entorno producci贸n)
  • config/credentials/production.yml.enc

_
Usando las credenciales en Rails

Para desarrollo:

rails c
Rails.application.credentials.config # nos mostrara todo el contenido
Rails.application.credentials.aws # nos mostrara el valor de la clave aws

Para producci贸n:

RAILS_ENV=production rails c
Rails.application.credentials.config # nos mostrara todo el contenido
Rails.application.credentials.aws # nos mostrara el valor de la clave aws

_
Conceptos extra铆dos de:

en Windows para entrar al a editar el archivo
set EDITOR=notepad
rails credentials:edit

Aqu铆 les va mi aporte:

En el controller welcome_controller.rb

def hello
    @variable = Pet.first.name
    @variable_dos = Pet.first.breed
  end

En el hello.html.erb:

<p>Hola me llamo <%= @variable %> y soy un <%= @variable_dos %></p>

Mi Aporte:

Variables
Declaraci贸n de variables, sus alcances y convenciones

Variables globales, fuera de la clase
Las variables globales o fuera de clase se declaran anteponiendo un signo peso ($), ejemplo:
irb(main):001> $variable = 1+1

Variables de instancia
Las variables de instancia se declaran anteponiendo un signo arroba (@), ejemplo:
irb(main):001> @variable = 1+1

Variables locales
Las variables locales se declaran sin anteponer alg煤n signo o s铆mbolo, ejemplo:
irb(main):001> variable = 1+1

Convenciones para declarar variables
Generalmente para declarar variables se utiliza la convenci贸n underscore, que permite hacer m谩s legible la lectura de las variables, ejemplo.
irb(main):001> variable_flotante = 1.2
irb(main):001> variable_entera = 12345
irb(main):001> variable_cadena = 鈥渜werty鈥

Como trata Rails los datos sensibles

Una base de datos viene por defecto en las aplicaciones RoR llamada SQLite. SQLite tiene integrado, por defecto, un sistema de credenciales de acceso.
Manejo de secretos con Rails
++
Rails ha dise帽ado estrategias para lidiar con datos confidenciales. Desde sus primeras versiones hasta la actualidad se ha usado el archivo database.yml. En este archivo esta la configuraci贸n de acceso para las bases de datos.
++
No fue hasta la versi贸n 5.2 en que se integraron credenciales encriptadas. Gracias a esta actualizaci贸n se obtuvo la posibilidad de compartir estructuras mientras se conservaba la confidencialidad.
++
En el archivo database.yml se centra todo le sistema de informaci贸n sensible.
++
El archivo credentials.yml.enc es un archivo con contenido encriptado. No es posible editarlo ya que necesita del cmd. En el cmd escribimos

EDITOR=nano rails credentials:edit

Este comando nos llevar谩 a un editor en consola donde podremos editar el contenido. Una vez ahi podemos ver una clave por default. Podemos crear la nuestra usando una palabra:numero (hello:123456). Usamos ctrl + x -> y - > enter. Podemos acceder a este archivo usando la clase
Rails. Podemos acceder a las claves creadas usando .nombre_clave

Rails.application.credentials

Si vamos al controlador, creado previamente en el editor de texto (welcome_controller.rb), podemos crear una variable dentro de la acci贸n que tenemos (hello), a esta variable le asignamos la invocaci贸n anterior (Rails.application.credentials)

Como trata Rails los datos sensibles

Rails ya viene con una base de datos viene por defecto llamada SQLite. SQLite tiene integrado por defecto, un sistema de credenciales de acceso; por lo que no es necesario preocuparse por hacer pruebas con ella.

Sin embargo, en un entorno de desarrollo con m煤ltiples personas o en un entorno de producci贸n no debes exponer las credenciales o informaci贸n sensible con otras personas.

A lo largo del tiempo Rails ha dise帽ado diferentes estrategias para lidiar con estos datos confidenciales.

Actualmente, se usa el archivo database.yml donde se guarda toda la informaci贸n respecto a la conexi贸n con la base de datos y el archivo storage.yml, que se usa para guardar credenciales asociadas a servicios de almacenamiento externo. Adem谩s usa un sistema de credenciales encriptado mejorado (credentiasl.yml.enc).

Interactuar con el sistema de credenciales

Los archivos database.yml y credentials.yml.enc se encuentran en la carpeta config del proyecto. El archivo credentials esta encriptado por lo que podemos ver el contenido abriendolo normalmente. El archivo database.yml s铆 no est谩 encriptado por lo que podemos abrirlo sin problema.

Database.yml

Este archivo es creado con la misma aplicaci贸n. A pesar de que este archivo es para guardar credenciales, no tiene ning煤n dato sobre el usuario y la contrase帽a de la base de datos, porque Rails configura por defecto la conexi贸n y no es necesario un usuario y contrase帽a.

Credentiasl.yml.enc

Para abrir y editar este archivo se debe ejecutar el comando rails credentials:edit en la terminal. Pero antes hay que especificar con qu茅 editor se abrir谩 el archivo, de la siguiente forma: EDITOR=nano rails credentials:edit

Dentro del archivo existe una clave ya creada por defecto llamada secret_key_base y tiene como valor un n煤mero para establecer esquemas de seguridad.

Dentro de este archivo podemos definir cualquier credencial que queramos guardar de forma encriptada.


Para acceder a los valores de estas credenciales se ejecuta el siguiente comando, que devolver谩 el valor de la credencial:

# Rails.application.credentials.<nombre>
Rails.application.credentials.hello

Si se quiere mostrar el valor de una credencial en la vista (no es recomendable) se asigna este comando a una variable y se presenta en la vista como cualquier otra.

Puedes especificar el editor que m谩s se adapte a tus gustos. Por ejemplo al usar el comando de abajo鈥ste nos abre las credentials en VScode para modificarlas en el.
Una vez ya modificadas guardas y cierras el archivos, y VOILA! ya modificamos las credenciales utilizando VScode.

EDITOR="code --wait" rails credentials:edit

compa帽eros recuerden que si sale este mensaje de error al intentar en EDITOR=nano rails credentials:edit
Mensaje de error :
Rails: ActiveSupport::MessageEncryptor::InvalidMessage

Solucion: borramos los archivos
config/master.key
config/credentials.yml.enc
que se crearon por defecto
Ejecutamos
rails credentials:edit
y despues colocamos la linea comando
EDITOR=nano rails credentials:edit
para continuar con el curso
lo que descubr铆 es que la variable y el valor que colocamos en el editor es que cuando se guarda , este valor tambi茅n se encripta y si intentas ver el contenido con otro editor de texto no te deja ver lo que agregaste.

Si no te abre el editor al poner este c贸digo
EDITOR=nano rails credentials:edit
tienes que instalar nano con apt- install nano

Para los que est茅n viendo este tutorial y tengan ruby 7
con la terminal powershell de windows se usa este comando para editar las credenciales

$env:EDITOR="code --wait"
rails credentials:edit

Este es mi aporte del reto pasado.

class WelcomeController < ApplicationController
  def hello
    @my_pet = Pet.first
  end
end
<h1>Hello, my name is: <%= @my_pet.name %> and I'm a <%= @my_pet.breed %>!</h1>