Yii2: Простая проверка авторизован ли пользователь
В этой короткой заметке я покажу как просто в Yii2 вывести какое-либо содержимое только для гостей сайта, и второе наоборот, только для авторизованных пользователей.
В этом примере мы покажем сообщение не авторизованным гостям сайта:
user->isGuest) echo 'Pleas login or register for watch more kittens!'; ?>
А теперь наоборот, показываем сообщение только авторизованным пользователям:
user->isGuest) echo 'Now you can see more!'; ?>
Как проверить авторизован ли пользователь в приложении на Vue?
Делаю приложение и столкнулся с следующей задачей:
Скажем есть пункт меню «Профиль»
есть два представления данной страницы:
LoginPage — страница авторизации(регистрации)
ProfilePage — страница авторизованного пользователя с его данными
Как проверить авторизован ли пользователь в приложении или нет?
и в зависимости от ответа выдавать то или иное представление.
подозреваю что это нужно делать средством beforeEnter в path: ‘/profile’, component: ProfileViewsPage
- Вопрос задан более трёх лет назад
- 5094 просмотра
Комментировать
Решения вопроса 2
Evgeny Kulakov @kulakoff Куратор тега Vue.js
Vue.js developing
Мне кажется у вас не совсем верный подход, что если у вас будет множество путей, которые требуют авторизации? Один из вариантов добавить в роутер информацию требует данная страница авторизации или нет:
Информация о том, что авторизован пользователь или нет должна сохраняться например в localStorage.
Далее в beforeEnter проверяете для страницы, на которую осуществляется переход, требуется ли авторизация для нее. Если да, то смотрим в localStorage, проверяем авторизован ли пользователь, если да, то переходим на страницу, если нет, то отправляем его на страницу авторизации. После успешной авторизации сохраняем, что пользователь авторизован в localStorage.
Также добавятся дополнительные условия, когда у вас протухает токен, по которому вы общаетесь с бэкендом.
Ответ написан более трёх лет назад
Нравится 1 3 комментария

Николай Семенов @nickola105 Автор вопроса
Сделал вот такую реализацию:
на странице профиля
export default < computed: < . mapGetters(< user: 'user' >) >, methods: < logOut() < this.$http.post('logout', < >) .then( response => < console.log(response); >, error => < console.log(error); >); localStorage.setItem('userAuth', 'no'); this.$router.push('/login') > >, beforeRouteEnter(from, to, next) < const userAuth = localStorage.getItem('userAuth'); //debugger if (userAuth === "yes") < next() >else < next('/login') >> >
на странице логин
export default < data() < return < user: < username: '', password: '' >, userAuth: '' >; >, methods: < logIn() < this.$http.post('auth', ,) .then( response => < this.userAuth = response.body; if (response.body === 'done') < localStorage.setItem('userAuth', 'yes') this.$router.push('/profile') >else < >console.log(response); >, error => < console.log(error); >); > > >
не совсем понял зачем в этой реализации
path: '/profile', component: ProfilePage requiresAuth: true,
все работает вроде без нее
Вроде все работает, но просьба к вам оценить профессионально

Evgeny Kulakov @kulakoff Куратор тега Vue.js
Так прокатит, если у вас только страница, которая для захода требует прав доступа, иначе в каждой придется писать вот это кусок:
beforeRouteEnter(from, to, next) < const userAuth = localStorage.getItem('userAuth'); //debugger if (userAuth === "yes") < next() >else < next('/login') >>
Нужно использовать глобальный хук beforeRouteEnter, и в нем каждый маршрут смотреть можно ли на него зайти без авторизации/с авторизацией
Определить, залогинен ли пользователь в FB/VK/G+/.
Задумался тут, а нельзя ли на своём сайте определить, залогинен ли пользователь в одной из популярных социальных сетей? Чтобы просто подсунуть ему родную для него форму ответа, провоцировать на комментарий 🙂
Как-то традиционно считаю, что нет. Куки чужие недоступны, приходит он с левым реферером и т.п.
Но, вдруг? Ведь фактически требуется только узнать, авторизован ли он в соц. сети, приватных данных не нужно. Уже при ответе его можно будет направить на OAuth.
Может, у кого-то в API такое есть? Или ещё как-то?

KRoN73 ★★★★★
23.12.12 23:08:22 MSK

Быстрый гуглинг привел к следующим результатам, однако я сам не тестировал:
Boba_Fett ★
( 24.12.12 01:49:57 MSK )

По идее, до обращения к API OAuth ты должен будешь получить токен, который ты получишь после того как юзер даст согласие на требуемом ресурсе, т.е. без участия юзера этого не сделать.
Reaper ★★
( 24.12.12 01:53:53 MSK )

Ага, xss называется ^___^
tazhate ★★★★★
( 24.12.12 01:54:42 MSK )
Ответ на: комментарий от Boba_Fett 24.12.12 01:49:57 MSK

Хм. Интересный подход, мне в голову не приходил. Годится. Надо будет применить 🙂
KRoN73 ★★★★★
( 24.12.12 01:56:03 MSK ) автор топика
Ответ на: комментарий от Reaper 24.12.12 01:53:53 MSK

По идее, до обращения к API OAuth ты должен будешь получить токен, который ты получишь после того как юзер даст согласие на требуемом ресурсе, т.е. без участия юзера этого не сделать.
Это уже второй этап и там по полной программе надо будет работать. Тут именно вопрос в определении соц. сети, в которой работает юзер, чтобы сразу направлять его туда без лишних сущностей в виде выбора сети.
Т.е. человек читает материал, видит форму ответа и комментарий, типа, «При ответе сообщение будет отправлено от вашего имени в такой-то соц-сети».
Или даже вообще подсунуть родную форму ответа от соц. сети, где уже цивильно, с именем и аватаркой всё будет.
KRoN73 ★★★★★
( 24.12.12 01:59:52 MSK ) автор топика

А статус разве не всем доступен? У контакта судя по апи (см online в fields) вроде можно получить. В крайнем случае можно страницу распарсить в качестве костыля.
Kalashnikov ★★★
( 24.12.12 09:34:14 MSK )
Ответ на: комментарий от KRoN73 24.12.12 01:59:52 MSK

может проще просить их войти через соцсеть и по этому ориентироваться?
trashymichael ★★★
( 24.12.12 11:58:10 MSK )
Ответ на: комментарий от trashymichael 24.12.12 11:58:10 MSK

может проще просить их войти через соцсеть и по этому ориентироваться?
Хорошо, если процентов 10 посетителей на это пойдут. А, скорее всего, и того меньше будет 🙂
А вот когда у тебя в комментариях висит открытая форма ответа, да ещё и с твоей мордой на аватаре, то это очень должно стимулировать.
KRoN73 ★★★★★
( 24.12.12 14:41:20 MSK ) автор топика

Если найдешь решение — отпишись пожалуйста. Очень интересная идея.
drakmail ★★★★
( 24.12.12 16:03:11 MSK )
Ответ на: комментарий от Kalashnikov 24.12.12 09:34:14 MSK
Пользователь может быть залогиненым в браузере на другом компьютере или на телефоне
bhfq ★★★★★
( 24.12.12 16:07:54 MSK )
Ответ на: комментарий от drakmail 24.12.12 16:03:11 MSK

Чтобы определить сам факт логина, анонимус выше вполне рабочее решение предложил (по ссылкам). По крайней мере у автора по первым ссылкам мой статус логина определился верно 🙂
Так и буду делать. Первый этап, подсунуть форму ответов от выбранной соц.сети, в теории готов.
На практике потом ещё бы неплохо комментарии из этой соц. сети вытаскивать и уже у себя прямо использовать. Тут надо будет ещё покопать, видимо.
Либо, что лучше, сразу использовать автору авторизацию по OpenID (тем более, что он уже залогинен, ему только одно лишнее нажатие надо будет сделать, подтвердив разрешение доступа к своим данным). Но тут минус в том, что в таком варианте до подтверждения авторизации пользователем его аватарка может быть недоступна, снижая привлекательность формы ответа 🙂 В общем, есть ещё над чем подумать.
KRoN73 ★★★★★
( 24.12.12 16:12:38 MSK ) автор топика
Ответ на: комментарий от KRoN73 24.12.12 16:12:38 MSK

О, отлично! Именно проверка статуса логина и нужна была.
drakmail ★★★★
( 24.12.12 16:22:53 MSK )
Ответ на: комментарий от bhfq 24.12.12 16:07:54 MSK

Так ТС нужно определить какую социалку он юзает же, всё нормально.
Меня кстати это скорее оттолкнёт, я бы в первый раз предлагал выбрать что нужно, а потом бы запоминал. Можно ещё в первый раз дефолтом контактик подсунуть, всё ранво он популярней всего в рашке.
Kalashnikov ★★★
( 24.12.12 16:29:23 MSK )
Ответ на: комментарий от Kalashnikov 24.12.12 16:29:23 MSK

Меня кстати это скорее оттолкнёт, я бы в первый раз предлагал выбрать
Ну так возможность выбрать я оставлю 🙂 Тут именно ориентация на тех, кому лениво выбирать. На большинство.
Можно ещё в первый раз дефолтом контактик подсунуть, всё ранво он популярней всего в рашке.
Но человек может быть там не залогинен, а зайти прямо с того же Фейсбука.
KRoN73 ★★★★★
( 24.12.12 16:35:27 MSK ) автор топика
Ответ на: комментарий от Kalashnikov 24.12.12 16:29:23 MSK
Я считаю это не нужной тратой времени, например я могу быть залогиненым в facebook так как вечно туда кто-то что-то пишет. А в твиттере я не сижу, я его использую как раз для таких вот авторизаций на сайтах или google аккаунт (если нет твиттера), но самим google+ я не пользуюсь.
bhfq ★★★★★
( 24.12.12 16:41:46 MSK )
Ответ на: комментарий от bhfq 24.12.12 16:41:46 MSK

потому предлагать выбирать наиболее правильное решения, у меня тоже браузер залогинен во все эти социалки, но это ничего не значит
trashymichael ★★★
( 24.12.12 16:51:36 MSK )

У контактега же есть родное API для комментирования с возможностью запостить себе на стену.
Там автоматом определяется, залогинен ты, или нет.
Или это не то, что надо?
Насчет других соц. сетей не знаю.
solovey ★★
( 25.12.12 16:44:10 MSK )
Ответ на: комментарий от solovey 25.12.12 16:44:10 MSK

Нет, не то. Чтобы задействовать VK, нужно заранее уже знать, что посетитель использует именно VK, а не FB или G+.
KRoN73 ★★★★★
( 25.12.12 16:45:27 MSK ) автор топика
Ответ на: комментарий от KRoN73 25.12.12 16:45:27 MSK

А, блин, я не внимательно читаю.
solovey ★★
( 25.12.12 17:00:07 MSK )
Ответ на: комментарий от KRoN73 24.12.12 16:12:38 MSK

На практике потом ещё бы неплохо комментарии из этой соц. сети вытаскивать и уже у себя прямо использовать. Тут надо будет ещё покопать, видимо.
Обязательно нужно использовать их комментарии? А если сохранять их у себя с указанием с какой соц. сети писали? Что-то похожее я видел на некоторых сайтах. Одна форма ввода комментария с выбором от какой учетной записи соц. сети писать. Только теперь не могу найти эти сайты, чтобы проверить (как раз сам думал над таким способом для одного своего проекта).
gruy ★★★★★
( 25.12.12 17:27:02 MSK )
Так выпили регистрацию, делов-то.
Ведь фактически требуется только узнать, авторизован ли он в соц. сети
Чиатй api к socialochkaname, руками его впиливать долго и нудно, по идее уже должны быть агрегаторы, типа как addthis был раньше для простых кнопок добавления туда-то и сюда-то.
Deleted
( 26.12.12 05:55:35 MSK )
Ответ на: комментарий от Deleted 26.12.12 05:55:35 MSK

Не катит. Нужно уметь банить.
is_user_logged_in() │ WP 2.0.0
Проверяет авторизован ли пользователь (вошел ли пользователь под своим логином). Возвращает true, если пользователь авторизован и false, если нет. Условный тег.
pluggable функция — эту функцию можно заменить из плагина. Это значит, что она будет работать (подключается) только после подключения всех плагинов, а до этого момента функция еще не определена. Поэтому нельзя вызывать эту и зависящие от неё функции прямо из кода плагина. Их нужно вызывать через хук plugins_loaded или позднее, например хук init. Замена функции (переопределение) — в плагине можно создать функцию с таким же названием, тогда она заменит текущую функцию.
Работает на основе: wp_get_current_user()
1 раз — 0.000012 сек (очень быстро) | 50000 раз — 0.01 сек (скорость света) | PHP 7.0.2, WP 4.4.1
Возвращает
true|false . true, если условие выполняется (пользователь авторизован) и false, если пользователь не авторизован.
Использование
if ( is_user_logged_in() ) < // . >
