2016-08-07 8 views
0

Ich habe eine Golang-Web-Anwendung mit Revel-Framework gemacht. Ich habe Probleme mit der Umleitung auf die vorherige Seite nach dem Login. Ich habe wenige Seiten, auf denen sich Benutzer anmelden sollten, um den Inhalt zu sehen. Ich habe erfolgreich auf Login-Seite, wenn die Benutzer umgeleitet wird nicht angemeldet Hier ist mein Code-Snippet -.revel umleiten auf vorherige URL nach dem Login

func checkUser(c *revel.Controller) revel.Result { 
if _, ok := c.Session["user"]; ok { 
    return nil 
} 
    var cont = c.Request.RequestURI 
    fmt.Printf("Requesting URL : ", cont) 
    return c.Redirect(LoginApp.Login, cont) 
} 

func init() { 
    revel.InterceptFunc(checkUser, revel.BEFORE, &App{}) 
} 

Und hier ist mein app.go

type App struct { 
    *revel.Controller 
} 

func (c App) Application() revel.Result { 
    var app = make(map[string]string) 
    app["appTitle"] = "Hourglass" 
    app["ngApp"] = "app" 
    app["theme"] = "dark" 
    app["ngController"] = "ApplicationController" 
    return c.Render(app) 
} 

func (c App) Test() revel.Result { 
    var app = make(map[string]string) 
    app["appTitle"] = "Hourglass" 
    app["ngApp"] = "app" 
    app["theme"] = "dark" 
    app["ngController"] = "ApplicationController" 
    return c.Render(app) 
} 

Jetzt habe ich eine login.go Datei, die eine ServiceLogin Methode enthält

func (c LoginApp) ServiceLogin(user models.User) revel.Result { 

    username := user.UserName 
    password := user.Password 
    fmt.Printf("", username) 
    fmt.Printf("", password) 
    sess := service.GetSession() 
    usercoll := sess.DB("hourglass_dev").C("user") 
    var result models.User 
    var err = usercoll.Find(bson.M{"UserName": username, "Password": password}).One(&result) 
    fmt.Printf("", result) 
    fmt.Printf("", c.Request.RequestURI) 
    if err != nil { 
    fmt.Printf("", err) 
    } 
    //var app := make(map[string]string) 
    //return c.Render(app) 
    c.Session["user"] = username 
    return c.Redirect(App.Application) 
} 

nun in der letzten Zeile der Methode, die ich zu hart codiert haben die App.Applica, statt dessen möchte ich die anfragende URL verwenden, damit sich der Benutzer bei erfolgreicher Anmeldung automatisch auf die gewünschte Seite umleitet.

Antwort

0

Es gibt ein paar Dinge, die Sie tun können:

  • Sie konnten die referer field des Headers in der Anfrage verwenden und wieder dorthin umleiten. Ich weiß nicht, wie zuverlässig das Referer-Feld ist, also glaube ich nicht, dass ich diese Technik selbst anwenden würde, aber es ist einfach, also könnte es je nach Anwendungsfall gut genug sein. In Revel, würden Sie die Referer mit so etwas wie diese zugreifen.

    c.Request.Header [ "referer"] Get()

  • Sie die Original-Link speichern könnten Sie in der Datenbank umleiten möchten und verknüpfen Sie diese Verknüpfung mit der Sitzungs-ID, die Sie bereits verwenden. Revel kommt nicht mit einer Datenbank, aber es kommt mit einem In-Memory-Cache, der funktionieren könnte.

  • Sie könnten den Link in einem Cookie auf dem Client speichern. Ich mache das nie, also bin ich mir nicht sicher, worüber du darüber nachdenken solltest, aber ich glaube, es würde funktionieren.

  • Sie könnten den Link zu jeder URL im Prozess über Anfrageparameter kommunizieren. Es gibt ein paar Dinge, die man bei dieser Technik beachten sollte, einschließlich Sicherheit, URL-Entweichen und so weiter, aber diese Technik hat einige Vorteile, wie beispielsweise keinen Datenbankzugriff erfordern. Ihre URLs würde wie folgt aussehen:

    http://www.example.com/loginurl?redirecturl=[someurl]

Verwandte Themen