Mobile App Webframe Authentifizierung mit Rails Devise

Ich arbeite derzeit an der Implementierung einer mobilen App für unsere Website, die Ruby on Rails und Devise verwendet. Die Idee hier ist zunächst ein mobiles Login-Formular, das bei erfolgreichem Login einen Web-Frame öffnet, der authentifiziert wird und die normale Nutzung der (mobil optimierten) Website ermöglicht. Theoretisch sollte das möglich sein. Ich habe Probleme mit den folgenden Problemen:

  1. Wie bekommst du den reinen Sitzungsschlüssel für die Benutzersitzung über eine Json-Anfrage? Welche Methoden können verwendet werden, um manuell aus der Entwicklung zu generieren, was die sign_in(:user, user) Methode macht?

  2. Erkennen, ob ein ausgehender Anruf beantwortet wurde
  3. Wie man eine Audio- und Video-Dateien in Android zusammenführt
  4. Starten Sie FragmentActivity aus Aktivität
  5. Bitbucket - Push-Projektdateien in ein leeres Git-Repository
  6. Android Multitouch - Zweiter Finger ACTION.MOVE Ignoriert
  7. Schreiben von Dateien auf externen Speicher in Android fehlgeschlagen
  8. Ist es sogar möglich, diesen Schlüssel zu nehmen und ihn in den Browser-Cookie zu setzen, wie es normalerweise in der Entwicklung geschieht, aber auf der mobilen Seite?

Ich weiß, dass dies nicht die Standardmethode für mobile Anwendungen für die Website ist, aber ich glaube, es sollte möglich sein.

  • So ändern Sie Android Talkback im Falle eines App-Namens
  • Wie macht man Animation in Android?
  • Android: KeyListener für einen EditText, der keine Schlüssel empfängt
  • Wie kann man Schweregrade in lintOptions setzen?
  • Wie man BitmapDescriptor umwandelbar in android für imageview umwandelt
  • Konnte nicht finden com.google.android.gms: Play-Services: 7.3.0
  • 4 Solutions collect form web for “Mobile App Webframe Authentifizierung mit Rails Devise”

    Vielleicht möchten Sie die Verwendung von Devise Token Auth und Behandlung Ihrer mobilen Anwendung wie nur eine andere Webapp, die die Erlaubnis von Ihrer Haupt-Website verlangt. DTA ist besonders nett, da es sich um die Verwaltung der Session-Token (Erneuerung / Abwicklung) und übergibt sie auf die App, die Zugang benötigen. Das Problem ist, Ihre Sitzungscontroller zu überschreiben, so dass es sich automatisch anmeldet, nachdem Sie sich bereits auf der mobilen App angemeldet haben (oder einfach nur das Anmelden umschreiben, damit es in Verbindung mit der Rails-Website statt früher stattfindet). Wenn man bedenkt, dass Sie bereits Devise verwenden, kann dies auch mehr refactoring sein, als Sie möchten.

    Wenn Sie Ihr Authentifizierungsformular auf die mobile Benutzeroberfläche setzen und die Anmeldeinformationen an den Webrahmen übergeben möchten, benötigen Sie eine Möglichkeit, Daten von der mobilen App an den Webrahmen zu übergeben.

    Wie Sie dies erreichen, hängt davon ab, auf welcher Plattform Sie aufbauen. Ich bin nicht wirklich ein mobiler Entwickler, also weiß ich nicht sicher, wie schwierig / einfach diese Optionen sind:

    1. Beim Öffnen des Web-Rahmens, Instanziieren Sie es mit Sitzungsdaten
    2. Finden Sie eine Möglichkeit, Methoden auf dem Client aus dem Web-Frame aufrufen. Etwas wie getSessionData .
    3. Sie könnten einen Fingerabdruck für den Web-Frame generieren, die mobile UI diese Daten an den Server senden und dann den Web-Frame mit dem Server authentifizieren, indem er den Fingerabdruck sendet.

    Auch hier bin ich nicht ganz sicher, wie möglich alle diese Optionen sind.

    Sie sollten Token-Berechtigung und Android tiefe Verknüpfung verwenden. Es erlaubt Ihnen, sich im Webbrowser anzumelden und ein Token zu Ihrer App über eine tiefe Verknüpfung zu senden.

    OK, also habe ich beschlossen, eine webframe-lösung wie folgt zu machen, im Grunde posten Sie das Login und das Passwort auf eine bestimmte Sign_in-Methode, die speziell entworfen wurde, um einmalige Zeichen in Token für die Anwendung zu generieren. Sie brauchen zwei Methoden im System, um das zu tun:

    Routes.rb

     devise_scope :user do get "sign_in_with_token/:token" => "sessions#sign_in_with_token" post "get_login_token" => "sessions#get_login_token" end 

    Sessions_controller.rb (vergessen Sie nicht, die Methode hinzuzufügen, die den failed_sign_in_count auf falsches Kennwort erhöht, andernfalls kann es zu grobkräftigen Angriffen kommen)

     def get_login_token user = User.find_by_email(sign_in_params["login"]) password = sign_in_params["password"] if user and user.valid_password?(password) token = SecureRandom.hex(16) user.update_attribute(:authentication_token, token) render json: {token: token}, status: 200 else render json: {error: "error"}, status: 403 end end 

    Und die Methode, sich mit diesem Token anzumelden

     def sign_in_with_token @user = User.where(authentication_token: params[:token], email: Base64.decode64(params[:email])).first if @user @user.update_attribute(:authentication_token, nil) sign_in(@user, bypass: true) end redirect_to '/' # or user_root_url end 

    So wird die mobile App so funktionieren:

    1. Verwenden Sie den generischen Web-Frame, um ajax-Anfragen an den Server zu senden und erhalten Sie dieses Token für die Benutzer-E-Mail, wenn das Passwort korrekt ist.
    2. Make a / sign_in_with_token / # {token von ajax}? Email = # {base46 coded email} Link in der App.
    3. Öffnen Sie diesen Link innerhalb des Web-Frames und verwenden Sie die App, als ob Sie normal angemeldet waren. Jetzt kann die App E-Mail und Passwort lokal speichern und diese Logik verwenden, um das Token wieder für eine andere Sitzung zu bekommen. Spätere Anmeldung kann auch die App-ID so einstellen, dass Push-Benachrichtigungen gesendet werden können.

    Schätzen Sie Feedback oder Kritik an dieser Lösung.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.