如何使用Principal或Account服务获取当前登录用户

时间:2015-09-16 09:53:07

标签: angularjs jhipster

我正在尝试加载特定于登录用户的$ scope.projects。 REST api方面是

@RequestMapping(value = "/users/{id}/projects", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
public ResponseEntity<List<Project>> getAllProjects(@PathVariable("id") String id,
        HttpServletResponse response)
        throws URISyntaxException {
    log.debug("REST request to get User : {}", id);
    User user = userRepository.findOneByLogin(id);
    if (user == null) {
        response.setStatus(HttpServletResponse.SC_NOT_FOUND);
    }
    List<Project> page = projectRepository.findByUserIsCurrentUser();
    return new ResponseEntity<List<Project>>(page,
            HttpStatus.OK);
}

使用招摇客户端进行检查。

    angular.module('tfmappApp')
.factory('UserProject', function ($resource) {
    return $resource('api/users/:id/projects', {}, {
            'query': {method: 'GET', isArray: true, params: { id: '@login'}},
            'get': {
                method: 'GET',
                transformResponse: function (data) {
                    data = angular.fromJson(data);
                    return data;
                }
            }
        });
    });

angular.module('tfmappApp')
.controller('ProjectController', function ($scope, Principal, Project, User, UserProject, ParseLinks) {
    $scope.projects = [];
    $scope.page = 1;

    Principal.identity().then(function(account) {
        $scope.account = account;
        $scope.isAuthenticated = Principal.isAuthenticated;
    });
    $scope.loadAll = function() {
        $scope.projects = UserProject.query({id: $scope.account.login});

    };
    $scope.loadPage = function(page) {
        $scope.page = page;
        $scope.loadAll();
    };
    $scope.loadAll();});

主要服务是Jhipster生成。以下代码不起作用,或者我遗漏了一些东西。

Principal.identity().then(function(account) {
        $scope.account = account;
        $scope.isAuthenticated = Principal.isAuthenticated;
    });

如何获取当前登录的用户?

获取当前登录的帐户,主体或用户的正确方法是什么?

我正在使用Jhipster生成的HTTP会话身份验证。

2 个答案:

答案 0 :(得分:1)

我找到了解决这个问题的方法。不是我想要的确切。

@Query("select project from Project project where project.user.login = ?#{principal.username}")
List<Project> findByUserIsCurrentUser();

是jhipster生成的代码,用于加载当前用户的项目列表。项目与用户之间存在多对一的关系。

因此不需要像/users/{id}/projects这样的REST网址,我们可以在工厂和java rest控制器中直接使用/projects

这最终将有助于获取当前登录用户的项目列表。

愿这对某人有所帮助。

答案 1 :(得分:0)

我认为每次我们想要它时都不能从服务器返回当前用户... 当前用户必须在Principal服务中注册,因为在应用程序中,我们可能希望多次调用此函数以用于不同目的。如果在其他服务中,您不希望获得验证当前用户的承诺,则可以使用Principal服务中的当前用户变量。 所以,为此,我刚创建了一个Principal字段,我每次用户登录时都会更新...(每次在Principal服务中调用身份函数时):

var principalService = this;
// retrieve the identity data from the server, update the identity object, and then resolve.
Account.get().$promise
            .then(function (account) {
                _identity = account.data;
                principalService.currentIdentity = angular.copy(_identity);
                console.log('current identity :' + JSON.stringify(principalService.currentIdentity));

                _authenticated = true;
                deferred.resolve(_identity);
                Tracker.connect();
            })
            .catch(function () {
                _identity = null;
                _authenticated = false;
                deferred.resolve(_identity);
            });
        return deferred.promise; 

当然,当用户退出时,您必须将其重置或设置为{}或其他任何内容。