2016-07-26 11 views
0

Я создаю приложение Flask, которое использует Stormpath и Flask-Stormpath для auth. Я хочу, чтобы заблокированный пользователь не получал доступ к страницам/login или/register (поскольку это не имеет особого смысла - зарегистрированный пользователь не должен входить в систему, и вы зарегистрированы по определению, если вы уже вошли в систему). Я попытался решение в моем шаблоне пользовательские страницы Логин, делать что-то вдоль линий:Как остановить регистрацию пользователей от доступа к страницам входа/регистрации с помощью Flask-Stormpath?

{% block page_heading %} 

    {% if user.given_name %} 
     Already Logged in as {{ user.given_name }} 
    {% else %} 
     Enter your credentials 
    {% endif %} 

{% endblock page_subheading %} 

Если пользователь в настоящее время вошли в систему, user.given_name будет определен и блок page_heading возьмет «уже вошли в 'сообщении, а в противном случае - сообщение «введите свои учетные данные» (в обычном случае, когда пользователь, не прошедший проверку подлинности, пытается войти в систему). Я использую ту же конструкцию, чтобы показать форму входа или более текст ошибки. Тем не менее, эта попытка не работает: как будто user.given_name всегда возвращается к неопределенному, когда вошедший в систему пользователь посещает/регистрируется. Это подразумевает, что, если кто-то вошел в систему и посещает/регистрируется, они выходят из системы - это объясняет провал моей попытки решения.

Учитывая вышеизложенное и после консультаций с документами, я мог бы использовать is_authenticated(); но не через Flask-Stormpath, а через базовый модуль Flask-Login, поскольку Flask-Stormpath всегда устанавливает это для возврата True, для документов, но я понятия не имею, как это сделать.

Кроме того, мой подход взломан - я считаю, что лучшее решение будет находиться на стороне приложения Python.

Итак, мой вопрос заключается в следующем: какой самый разумный способ обнаружить пользователя входит в систему и дается это, не позволяет им получать доступ или перенаправлять их на страницы/login и/register? Может быть, есть волшебный декоратор где-то, что является противоположностью

@login_required 

или stormpath встроенной в «несанкционированном» группы, которые я мог бы использовать как в

@groups_required(['unauthorised']) 

Или, может быть, я по праву линии с моей первоначальной попыткой.

Любая помощь приветствуется :)

+0

Обновление: Я просто попытался мой оригинальный подход (решение на основе шаблона) со страницей/регистра и получил желаемое поведение. Вещи все еще не работают для/login. Выглядит все более и более вероятно, что если вошедшие в систему пользователи посещают/регистрируются, они выходят из системы, а затем отображается страница входа в систему. Не знаю, как с этим бороться –

ответ

0

Вы можете создать decorator, содержащий код, приведенный ниже. Он будет перенаправлять пользователей на другую страницу, если они попытаются получить доступ к странице входа.

if current_user.is_authencticated(): 
    return redirect (url_for('home')) 
+0

Эй, спасибо за ответ. Где бы этот код прошел точно? С помощью фляжки-шторма, функции просмотра для/login и/register являются внутренними для библиотеки. –

+0

внутри декоратора, позвольте мне изменить. – roy

+0

Приветствия, я ценю помощь –

1

Heyo!

Итак, я автор Flask-Stormpath, я думал, что перееду сюда. Вместо того, чтобы пытаться изменить поведение login/register (которое я бы не рекомендовал, поскольку мы периодически меняем этот материал с помощью релизов библиотеки), лучшим решением является просто скрыть эти URL-адреса от пользователя после их входа в систему.

На многих веб-сайтах есть, например, верхний навигатор, который изначально говорит «Вход» и «Регистрация» где-то. Но после того, как вы вошли в систему, эти кнопки меняются на что-то еще, обычно «панель инструментов» или аналогичные.

Таким образом, пользователь не может войти в/войти или зарегистрироваться, если только они не набрали в браузере и не попытаются туда пойти вручную.

Я думаю, что это идеальный сценарий, который можно выполнить с помощью шаблона условной логики:

{% if user %} 
... 
{% else %} 
... 
{% endif %} 
+0

Эй! Я делаю это - нет способа войти в систему для входа/входа или регистрации в моем приложении. Это был случай ввода/входа в адресную строку вручную, о котором я говорил в своем вопросе. Извините, я должен был упомянуть об этом в моем вопросе! –

+0

Большая библиотека btw –