Laravel 5.3 Auth — возможность зарегистрироваться и войти в систему, а также продолжить работу в качестве гостя

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

Теперь я планирую ввести возможность работать в качестве гостя, чтобы они могли «Войти в систему как гость», а затем действовать как обычный пользователь (но без возможности постоянного сохранения информации, которую они там вводят). Кроме того, они всегда должны иметь возможность изменить эту гостевую учетную запись на постоянную учетную запись, введя свой адрес электронной почты, а также пароль. Я думал о том, чтобы просто создать нового пользователя в БД при нажатии на вход в качестве гостя, как обычный зарегистрированный пользователь, а затем удалить его, но я не уверен, что это возможно легко... Есть ли способ "легко" сделать это или у вас есть идеи о том, как это сделать?

Зарегистрированный пользователь должен иметь возможность делать множество вещей, таких как изменение своего адреса, информации, отправка билета, подписка на информационный бюллетень и т. д., гости смогут только положить что-то в свою корзину и купить (и пока покупая, они также должны иметь возможность создать учетную запись ..) Также я знаю, что мне может потребоваться реализовать пользовательскую защиту для аутентификации гостевого пользователя (потому что обычно им потребуется пароль, я только хочу, чтобы они ввели свой почтовый адрес, чтобы "войдите в систему". Но, конечно, мне нужно сгенерировать сеансовый ключ и т. д., так что тогда это часть охранников... Но что мне нужно сделать, чтобы создать такой собственный охранник, который заполняет мои проблемы? Я нашел laravel документ для этого (https://laravel.com/docs/5.3/authentication#adding-custom-guards), но не могу совместить это с моей проблемой....

PS: я использую Laratrust для разных ролей на странице, поэтому я могу отображать различные меню или другую информацию для гостя после входа в систему с его почтовым адресом. Но все же вопрос в том, как это сделать... Спасибо за любую помощь!

Правка. Подумав еще раз, я хочу внести ясность. В основном я планирую изменить страницу входа в систему и добавить кнопку «Продолжить как гость» и определить для нее маршрут, например guestLogin. Этот маршрут будет указывать на контроллер, который каким-то образом входит в систему, используя (вероятно, самодельную) аутентификацию. При нажатии на кнопку в таблицу users моей базы данных добавляется запись, содержащая только идею и токен запоминания. Затем гость может поместить товары в свою корзину и заказать что-нибудь. В процессе заказа ему необходимо ввести свою личную информацию, такую ​​как адрес, адрес электронной почты и т. д. Затем он также может установить флажок, чтобы автоматически зарегистрироваться, введя пароль. Затем его информация также сохраняется в БД (в строке, созданной для гостевого пользователя).

PS: Опять же, в Laratrust я бы создал роль гостя, чтобы показывать именно те страницы, которые я хочу, чтобы он показывал, а также настраиваемые страницы оформления заказа. Таким образом, единственная реальная проблема - это вход в систему (с помощью пользовательской защиты авторизации, которую я понятия не имею, как ее реализовать), а также более поздняя регистрация для пользователя, который в основном уже существует (даже если пока это просто идентификатор в БД).

Надеюсь, вы поняли мою идею.


person nameless    schedule 16.02.2017    source источник
comment
Я думаю, что нехорошо предоставлять один и тот же поток зарегистрированного пользователя гостевому пользователю, есть разница для гостя и зарегистрированного.   -  person Soniya Basireddy    schedule 16.02.2017
comment
@Sona, у них не будет одинаковых возможностей, зарегистрированный пользователь должен иметь возможность делать множество вещей, таких как изменение своего адреса, информации, отправка билета, подписка на информационный бюллетень и т. д., гости смогут только поставить что-то в своей корзине и купить это (и при покупке они также должны иметь возможность создать учетную запись ..)   -  person nameless    schedule 16.02.2017
comment
да, исходя из требований, нам нужно ограничить гостя..   -  person Soniya Basireddy    schedule 16.02.2017
comment
сохраняйте ролевой идентификатор для зарегистрированного и гостевого пользователя в одной таблице при регистрации, на основе которой вы можете получить доступ к этим людям.   -  person Soniya Basireddy    schedule 16.02.2017


Ответы (1)


Аутентификация и авторизация работают вокруг сохранения и запоминания пользователя, который запрашивает ресурс с сервера. Чтобы иметь возможность помнить, вы должны использовать либо сеанс, либо базу данных, либо любой другой механизм хранения.

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

Сохраните этот адрес электронной почты или другую информацию в пользовательской таблице базы данных или создайте гостевую роль в Laratrust. Это просто гостевая роль, которая может выполнять операции с основными данными без ввода пароля.

Посмотрите, поможет ли это, в противном случае мы можем погрузиться в более подробное обсуждение.

person Rutvik Bhatt    schedule 16.02.2017
comment
Придется ли мне поэтому иметь дело с Laravel Guard? Или как они входят? - person nameless; 16.02.2017
comment
Да, чтобы сделать его более надежным и безопасным, вы должны. - person Rutvik Bhatt; 16.02.2017
comment
И ты когда-нибудь делал это? Или знаете, как это сделать? Итак, используйте мой собственный тип входа (просто введите адрес электронной почты или что-то еще), а затем используйте защиту авторизации для аутентификации и сохранения токена сеанса и т. д.? - person nameless; 16.02.2017
comment
Для аутентификации по умолчанию Laravel потребуется пароль для аутентификации и создания токена, поэтому вам нужно создать другую защиту и использовать ее при гостевом входе в систему. - person Rutvik Bhatt; 16.02.2017
comment
Любые ссылки о том, как это сделать? - person nameless; 16.02.2017
comment
Я также нашел это сейчас в документации (laravel.com/docs/5.3/authentication #adding-custom-guards), но никак не могу совместить это с моей проблемой.... - person nameless; 17.02.2017