2014-08-28 25 views
6

Tôi đang viết một webservice RESTful trên grails, sử dụng rest spring security api. Tất cả tốt ... bây giờ tôi muốn đăng nhập một người dùng đăng ký, có một hành động đăng ký, và lên trên hoàn thành đăng ký, tôi muốn đăng nhập người dùng đó. Tôi đã tìm thấy:: REST bảo mật mùa xuân - Bằng tay xác thực người dùng mới và nhận mã thông báo truy cập

springSecurityService.reauthenticate(username) method 

nhưng chỉ đăng nhập người dùng, nhưng không tạo mã thông báo truy cập trong bảng authentic_token.

Có cách nào khác để đăng nhập và nhận mã thông báo truy cập cho người dùng đó không?

Trả lời

10

Plugin được thiết kế cho các ứng dụng mà giao diện người dùng (một ứng dụng HTML/JS thuần túy sử dụng, ví dụ, AngularJS) được tách khỏi phần phụ trợ (ứng dụng Grails) của bạn. Trong trường hợp này, phần phụ trợ phải gửi lại giao diện người dùng mã thông báo truy cập và giao diện người dùng phải lưu trữ bằng cách nào đó (thường sử dụng bộ nhớ cục bộ hoặc cookie), để chuyển nó thành HTTP trên mọi yêu cầu tiếp theo.

Bạn có thể làm một cái gì đó như thế này trong điều khiển của bạn:

class RegisterController { 

    def springSecurityService 
    def tokenGenerator 
    def tokenStorageService 

    def register() { 
     //do stuff 
     springSecurityService.reauthenticate(username) 
     String tokenValue = tokenGenerator.generateToken() 
     tokenStorageService.storeToken(tokenValue, springSecurityService.principal) 

     redirect url: "http://example.org/?access_token=${tokenValue}" 
    } 
} 

Sau đó, lối vào có thể lấy các token từ URL và vượt qua nó trên tất cả các yêu cầu API tiếp theo.

+0

Và những gì bout 'refresh_token' trong trường hợp này? Làm cách nào để nhận mã thông báo mới khi mã này hết hạn? Cái cũ có hoạt động không? – lealceldeiro

Các vấn đề liên quan