Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

form_for yancy.auth.password.login_form show empty form #100

Closed
pavelsr opened this issue Apr 19, 2020 · 1 comment
Closed

form_for yancy.auth.password.login_form show empty form #100

pavelsr opened this issue Apr 19, 2020 · 1 comment

Comments

@pavelsr
Copy link

pavelsr commented Apr 19, 2020

In Yancy::Plugin::Auth::Password#ROUTES manual said:

This plugin creates the following named routes. Use named routes with helpers like url_for, link_to, and form_for.

yancy.auth.password.login_form

Display the login form. See "TEMPLATES" below.

What is the correct usage of Yancy::Plugin::Form::form_for with yancy.auth.password.login_form named route ?

If I call

form_for('yancy.auth.password.login_form')

output is empty <form>...</form> :

<form action="/yancy/auth/password"></form>

There is no mention in Yancy::Plugin::Form::form_for how to use named route as argument, just $schema and %args

Also link_to('yancy.auth.password.logout') is working strange, output is <a href="/">yancy.auth.password.logout</a>

url_for helper works fine with yancy.auth.password.login named route as param.

@preaction
Copy link
Owner

To display the login form, you want to use the (undocumented, this is a bug) login_form helper:

%= $c->yancy->auth->login_form

All authentication modules install their helpers to the same place, so any auth module that has a login form will provide that helper. I'll improve the documentation in this area.

For the routes:

  • yancy.auth.password.login_form is the route to send users to in order to display the login form (the yancy/auth/password/login_page.html.ep template).
  • yancy.auth.password.login is the route which actually does the login procedure. If you're making your own form using the built-in Mojolicious form_for helper, that's the destination you want.
  • The link_to( 'yancy.auth.password.logout' ) I think is working like that because there's no content. You want something like link_to "Logout", 'yancy.auth.password.logout' or <%= link_to 'yancy.auth.password.logout', begin %>Logout<% end %>

I'm going to add examples of how to use the route names and mention which ones should be used for which things (form submission, link generation, etc...).

Thanks for asking these questions! It really helps me improve the docs and also to know how folks are using these things :)

preaction added a commit that referenced this issue Apr 19, 2020
Thanks @pavelsr for reporting this issue! Fixes #100

This renames the 'yancy.auth.login' route to 'yancy.auth.login_form' for
consistency with other login form routes.
preaction added a commit that referenced this issue Apr 19, 2020
    [Important!]

    - The 'yancy.auth.login' route is now named 'yancy.auth.login_form'
      to match the other login form routes.

    [Added]

    - Added disabling of CSRF field in Form plugins. Use this to build
      a form without a CSRF token inside.
    - Added top-level OR matching to `match` utility. Now the
      `require_user` authorization method can express more options.
    - Added `$match: any` to controller list actions. This changes the
      filter from "AND" to "OR", returning results that match any filter
      instead of requiring them to match all filters.

    [Fixed]

    - Fixed test failure with too old versions of
      Test::Mojo::Role::Selenium. Thanks @eserte for reporting this!
      [Github #98]
    - Fixed `yancy.form.form_for` helper being called with `app` causing
      CSRF failures. Now the Form helper will warn you when called
      without a request that can build a useful CSRF token. Thanks
      @pavelsr for reporting this! [Github #95]
    - In the controller list actions, '$order_by' can now be a field
      name to sort by that field ascending. Previously, the 'asc:' or
      'desc:' prefix was required.
    - Fixed foreign key fields not working when the first item in
      x-list-columns was using a template. Now, the foreign key field
      searches all fields in the template and uses the template to
      display the current value of the field. Thanks @OpossumPetya for
      reporting this issue! [Github #96]
    - Removed extra page loads from the authentication workflow:
        - The login form is now displayed on the unauthorized error page
        - Logging out brings the user back to where they were so, if
          necessary, they can log in again
    - Fixed user being returned to the wrong place after authentication:
        - If the login form was displayed by the login page, the user
          is returned to the previous page
        - Otherwise, the login form was displayed on the page the user
          wants, so they are directed back to that page
        - The `return_to` query param can be used to override where
          a user is returned in either circumstance

    [Docs]

    - Made the docs for Yancy::Controller::Yancy and
      Yancy::Controller::Yancy::MultiTenant easier to read.
    - Added undocumented `login_form` helper to auth plugins
    - Added examples of how to use Auth plugin routes and helpers.
      Thanks @pavelsr for reporting this issue! [Github #100]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants