• Как правильно работать с авторизацией в angularjs?

    Я сделал так

    myApp.factory('AuthInterceptor', ['$window', '$q', '$log',
        function($window, $q, $log) {
            $log.debug('start AuthInterceptor');
            return {
                request: function(config) {
                    config.headers = config.headers || {};
                    if ($window.localStorage.getItem('key')) {
                        config.headers.Authorization = 'Token ' + $window.localStorage.getItem('key');
                    }
                    return config || $q.when(config);
                },
                response: function(response) {
                    if (response.status === 401) {
                        $log.debug('Hey! I"m javascript. Authorization is needed!');
                    }
                    return response || $q.when(response);
                }
            };
        }
    ]);


    myApp.config(['$locationProvider', '$stateProvider', '$urlRouterProvider', '$httpProvider',
        function($locationProvider, $stateProvider, $urlRouterProvider, $httpProvider) {
    
            // Authorization interceptor
            $httpProvider.interceptors.push('AuthInterceptor');
    
        }
    ]);
    Ответ написан
    1 комментарий
  • Как правильно работать с авторизацией в angularjs?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Токен должен пересылаться в заголовках каждого запроса, который требует авторизации.

    рекомендую к прочтению дискуссию на SO
    Ответ написан
    3 комментария
  • Проблема с нужной выборкой?

    @0LLEGator
    "Начинающий" программист в средней компании.
    Можно соорудить простой запрос для подсчёта количества разговоров
    SELECT ifnull(COUNT ( `dl2`.`dialog_id`),0) AS ` dialog_count`
    FROM `dialog_relations` AS `dl1`
    INNER JOIN `dialog_relations`  AS `dl2` USING(`dialog_id`)
    WHERE `dl1`.`user_id` = @user1 AND `dl2`.`user_id` = @user2

    Но в приведённой вами схеме данных такой запрос может завышать количество разговоров, если они есть. Если совпадений нет, то они не появятся. Чтобы этот запрос работал корректно, рекомендую в первой таблице вместо искусственного PK в виде id записи сделать составной PK состоящий из ID разговора и ID участника, тогда он будет отражать суть и предохранять от дублирования записей.

    Для конкретно вашего случая правильно считать количество будет запрос
    SELECT ifnull(COUNT (DISTINCT `dl2`.`dialog_id`),0) AS ` dialog_count`
    FROM `dialog_relations` AS `dl1`
    INNER JOIN `dialog_relations`  AS `dl2` USING(`dialog_id`)
    WHERE `dl1`.`user_id` = @user1 AND `dl2`.`user_id` = @user2


    Чтобы лишь определить наличие разговоров можно сделать "красивее"
    SELECT ifnull(COUNT (DISTINCT `dl2`.`user_id`),0) AS ` dialog_count`
    FROM `dialog_relations` AS `dl1`
    INNER JOIN `dialog_relations`  AS `dl2` USING(`dialog_id`)
    WHERE `dl1`.`user_id` = @user1 AND `dl2`.`user_id` = @user2

    тут 0 - нет диалогов, 1 - есть диалоги.

    P.S. Справедливости ради хочу отметить, что без ifnull'а должно подойти для запроса @akashtrih-а. Единственное, стоит проверить на запросе с отсутствием разговоров между пользователями.
    Ответ написан
    2 комментария
  • Проблема с нужной выборкой?

    akashtrih
    @akashtrih
    Навскидку что-то такое:
    SELECT `dl2`.`id` AS `exists`
    FROM `dialog_relations` AS `dl`
    LEFT JOIN `dialog_relations`  AS `dl2` USING(`dialog_id`)
    WHERE `dl`.`user_id` = 1 AND `dl2`.`user_id` = 2
    Ответ написан
    2 комментария
  • Кому подарить книжку про Yii?

    SamDark
    @SamDark
    Yii2 core team
    Самое забавное, что я своих авторских копий не получил так как система доставки не знает, что такое Voronezh и упорно думает, что он в UK.
    Ответ написан
    7 комментариев