angularjs的config和interceptor - session注入


config

這個要從config的正確使用說起,也許你想在config某個provider的時候注入$rootscope, 但是這是不允許的,我們細看下面的特性

session注入

每個請求自帶sessionid,要實現這種功能就要用到interceptor,而不是用config配置ng-resource往里面添加參數 - config是在服務加載前提供配置參數個性化服務實例

    
    angular.module("secu.services")

    .factory('HttpInterceptor', ['$q', '$state',
        function($q, $state) {
            return {
                request: function(config) {
                    // config.headers['x-session-token'] = localStorage.getItem('sessionid');
                    if (localStorage.getItem('sessionid')) {
                        //1. post data
                        // config.data=config.data||{};
                        // config.data['session_id'] = localStorage.getItem('sessionid');
                        
                        //2. get parameters
                        config.params=config.params||{};
                        config.params['session_id'] = localStorage.getItem('sessionid');
                    }
                    // console.log('config: ',config);
                    return config;
                },
                requestError: function(err) {
                    return $q.reject(err);
                },
                response: function(res) {
                    if (res.data && res.data.code) {
                        switch (res.data.code) {
                            case '000':
                                return res
                            case '100':
                                alert(res.data.msg)
                                return res
                            case '200':
                                console.log(res.data.msg)
                                $state.go('login')
                                break
                        }
                    }

                    return res
                },
                responseError: function(err) {
                    if (-1 === err.status) {
                        // 遠程服務器無響應
                    } else if (500 === err.status) {
                        // 處理各類自定義錯誤
                    } else if (501 === err.status) {
                        // ...
                    }
                    return $q.reject(err);
                }
            };
        }
    ])

    .config(['$httpProvider',
        function($httpProvider) {
            $httpProvider.interceptors.push('HttpInterceptor');
        }
    ])


### x-session-token in header 現在多數網站都是用token作為認證,而非cookiebase的sessionid


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM