Angular JS и SpringBoot, получить пользователя после аутентификации - PullRequest
0 голосов
/ 19 марта 2020

Я хочу получить пользователя после входа в мое приложение, чтобы создать свою учетную запись. Например, я хочу, чтобы его Id перенаправил его на страницу: '/ user-cars /: userId'. Я использую Angular JS и SpringBoot. Я не знаю, как это сделать. Ниже мой код:

Конфиг. js

angular.module('app')
.config(function ($routeProvider, $httpProvider) {
    $routeProvider
        .when('/users', {
            templateUrl: 'app/components/users/list/userList.html',
            controller: 'UserListController',
            controllerAs: 'ctrl'
        })
        .when('/user-add', {
            templateUrl: 'app/components/users/edit/userEdit.html',
            controller: 'UserEditController',
            controllerAs: 'ctrl'
        })

        .when('/user-cars/:userId', {
            templateUrl: 'app/components/users/userCars/carList.html',
            controller: 'CarListController',
            controllerAs: 'ctrl'
        })
        .when('/user-login',{
            templateUrl: 'app/components/users/login/login.html',
            controller: 'AuthenticationController',
            controllerAs: 'ctrl'
        })

        .otherwise({
            redirectTo: '/',
            controller: 'HomeController',
            controllerAs: 'ctrl'
        });
    $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';
});

authService. js

angular.module('app')
.constant('LOGIN_ENDPOINT', '/user-login')
.constant('LOGOUT_ENDPOINT', '/user-logout')
.service('AuthenticationService', function($http, LOGIN_ENDPOINT, LOGOUT_ENDPOINT) {
    this.authenticate = function(credentials, successCallback) {
        var authHeader = {Authorization: 'Basic ' + btoa(credentials.email+':'+credentials.password)};
        var config = {headers: authHeader};
        $http
            .post(LOGIN_ENDPOINT, {
            }, config)
            .then(function success(res) {
                $http.defaults.headers.post.Authorization = authHeader.Authorization;
                successCallback();
            }, function error(reason) {
                console.log('Login error');
                console.log(reason);
            });
    }
    this.logout = function(successCallback) {
        delete $http.defaults.headers.post.Authorization;
            successCallback();
    }

});

authController. js

angular.module('app')
.controller('AuthenticationController', function($rootScope, $location, AuthenticationService) {
    var vm = this;
    vm.credentials = {};
    var loginSuccess = function() {
        $rootScope.authenticated = true;
        $location.path('/');
    }
    vm.login = function() {
        AuthenticationService.authenticate(vm.credentials, loginSuccess);
    }
    var logoutSuccess = function() {
        $rootScope.authenticated = false;
        $location.path('/');
    }
    vm.logout = function() {
        AuthenticationService.logout(logoutSuccess);
    }
})

Все работает, я получил принципал из Back-end, но сейчас я не знаю, как его использовать и получить пользователя

RestController. java `

@RestController
public class AuthenticationController { 
    @RequestMapping("/user-login")
    @ResponseBody
    public Principal login(Principal user)
    {
        return user;
    }`

Авторизация работает, у меня есть принципал, но я не знаю, что мне с ним делать.

1 Ответ

0 голосов
/ 19 марта 2020

На основе вашей реализации UserDetails вы можете заполнить данные пользователя. Реализация по умолчанию имеет только имя пользователя и пароль, дополнительные детали могут быть добавлены в пользовательскую реализацию.

Пример из Справочная документация Spring

Authentication auth = httpServletRequest.getUserPrincipal();
// assume integrated custom UserDetails called MyCustomUserDetails
// by default, typically instance of UserDetails
MyCustomUserDetails userDetails = (MyCustomUserDetails) auth.getPrincipal();
String firstName = userDetails.getFirstName();
String lastName = userDetails.getLastName();

Go через комментарии, реализация по умолчанию UserDetails

Пример для пользовательской реализации для вашей цели будет

public class MyCustomUserDetails implements UserDetails{
 // Have the id field declared
 private String userId;
 // ...getters and setters

}

Полный пример можно найти с этим ТАК вопрос и ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...