2016-12-11 6 views
-1

Ich kodiere eine Website, die keine legitime Möglichkeit zum Bearbeiten von Benutzern haben. Einmal erstellt, kann nichts geändert werden.Ist es möglich, Params über das Internet zu ändern?

Und hier ist meine Frage: Ist es möglich, Benutzerdaten zu ändern (zum Beispiel durch Senden von Patch-Anfragen) ohne Bearbeitungsformular (weil ich nicht erstellt), von Drittanbietern (a.k.a. nicht Host)?

Da Rails 5 erfordert, verwende ich starke params (Senden von Benutzernamen und Passwort beim Erstellen von Benutzer durch Anmeldeformular).

@routes

 Prefix Verb URI Pattern    Controller#Action 
    root GET /      sessions#new 
    signup GET /signup(.:format)   users#new 
      POST /signup(.:format)   users#create 
    login GET /login(.:format)   sessions#new 
      POST /login(.:format)   sessions#create 
    logout DELETE /logout(.:format)   sessions#destroy 
    users GET /users(.:format)   users#index 
      POST /users(.:format)   users#create 
new_user GET /users/new(.:format)  users#new 
edit_user GET /users/:id/edit(.:format) users#edit 
    user GET /users/:id(.:format)  users#show 
      PATCH /users/:id(.:format)  users#update 
      PUT /users/:id(.:format)  users#update 
      DELETE /users/:id(.:format)  users#destroy 

Sollte auch erwähnen, dass es keine Update-Methode ist, aber ich bin mit

resources :users 
+0

Sie haben kein Formular erstellt, aber existiert eine Aktualisierungsmethode? – spickermann

+0

Haben Sie Routen, die den Benutzer aktualisieren? Es gibt keine Möglichkeit zu wissen, wie Ihre App eingerichtet ist. Daher bin ich mir nicht sicher, was Sie für eine Antwort erwarten. –

+0

Nein, tut es nicht. Zusätzliche Routen zur besseren Übersicht – Kappa

Antwort

2

Für einen Zugriff Dritter auf Ihre db müssen Sie wahrscheinlich eine API.

Vereinfachtes Beispiel:

Sie App-URL ist https://myapp.example.com/.

config/routes.rb:

namespace :api do 
    namespace :v1 do 
    resources :users, only: [:update] 
    end 
end 

Rake Routen:

 Prefix Verb URI Pattern     Controller#Action 
api_v1_user PATCH /api/v1/users/:id(.:format) api/v1/users#update 
      PUT /api/v1/users/:id(.:format) api/v1/users#update 

app/controllers/api/v1/base_controller.rb:

class Api::V1::BaseController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    protect_from_forgery with: :null_session 
end 

app/controllers/api/v1/users_controller.rb:

class Api::V1::UsersController < Api::V1::BaseController 
    def update 
    # check params, maybe look for some security tokens 

    user = User.find(params[:id]) 
    if user 
     user.update_attribute(:name, params[:name]) 
     render plain: "success" and return 
    else 
     render plain: "failure" and return 
    end 
    end 
end 

anfordern Dann wie diese

curl -X PATCH https://myapp.example.com/api/v1/users/1?name=new_name 

würde mit id users 'ändern = 1 name von "new_name".

Für eine ordnungsgemäße API-Design können Sie überprüfen http://jsonapi.org/.

+0

Also, wenn ich nicht API wie diese erstellen, wird dieser Curl-Befehl nicht funktionieren? Weil solches Verhalten in meiner App unerwünscht ist. – Kappa

+0

Jede Anfrage muss von einem richtig gerouteten Controller bearbeitet werden. Wenn also keine Controller vorhanden sind, funktioniert curl nicht.Und warum genau ist dieses Verhalten unerwünscht? –

+0

Da alle Daten, die Benutzer während der Registrierung eingeben, permanente Daten sind, müssen sie nicht geändert werden. Deshalb möchte ich nicht, dass eine dritte Partei sie ändert. Vor allem ohne mein Wissen. – Kappa

Verwandte Themen